需要關於Elasticsearch的幫助。我嘗試獲取第一個完全匹配結果,然後使用以下查詢匹配一個字段的文檔,但沒有運氣。基本上,試圖首先獲得最高分,然後不太準確,並且只匹配總搜索結果中的一個字段。如何獲得彈性搜索以返回結果中的完全匹配和其他匹配
的映射如下:
{
"palsx1493": {
"mappings": {
"pals": {
"properties": {
"aboutme": {
"type": "string"
},
"dob": {
"type": "date",
"format": "date"
},
"fccode": {
"type": "string"
},
"fcname": {
"type": "string"
},
"learning": {
"type": "nested",
"properties": {
"skillslevel": {
"type": "string"
},
"skillsname": {
"type": "string"
}
}
},
"name": {
"type": "string"
},
"rating": {
"type": "string"
},
"teaching": {
"type": "nested",
"properties": {
"skillslevel": {
"type": "string"
},
"skillsname": {
"type": "string"
}
}
},
"trate": {
"type": "string"
},
"treg": {
"type": "string"
}
}
}
}
} }
搜索時,我需要的結果返回精確匹配的文檔,然後在優先次序與教學skillname匹配分數較低。現在發生的事情是,我首先得到正確的匹配,然後我得到了匹配的learning.skillname,然後teach.skillname匹配。我希望這兩個最後一個交換了具有完全匹配結果後的teaching.skillname。
完全匹配: 1. fcname(克羅姆是國名,可以是一個特定的名稱,或只是設置爲「任何國家」 2.出生日期:出生日期是一個範圍值 - 一個範圍值給出作爲輸入 3.教學:skillname 4.學習:skillname
這是我已經沒有運氣嘗試:
{
"query": {
"bool": {
"should": [
{ "match": { "fcname": "spain"}},
{ "range": {
"bod": {
"from": "1950-10-10",
"to": "1967-12-12"
}
}
},
{
"nested": {
"path": "learning",
"score_mode": "max",
"query": {
"bool": {
"must": [
{ "match": { "learning.skillname": learningSkillName}}
]
}
}
}
},
{
"nested": {
"path": "teaching",
"query": {
"bool": {
"must": [
{ "match": { "teaching.skillname": teachingSkillName}}
]
}
}
}
}
]
}
}
}
感謝您的意見,但這不是真正的問題,因爲我有一個詞匹配技能名稱。 – mrezzz