[英]Implementing priority search in elastic search
我正在嘗試在彈性搜索中實現自定義搜索。
問題陳述是考慮將3個文檔插入到具有“名稱”字段作為數組的彈性搜索中:
{
id:1,
names:["John Wick","Iron man"]
}
{
id:2,
names:["Wick Stone","Nick John"]
}
{
id:3,
names:["Manny Nick","Stone cold"]
}
當我搜索“ Nick”時,我想提升或優先使用以Nick開頭的文檔,因此在這種情況下,應先輸入ID 2的文檔,然后再輸入ID 3的文檔,如果我搜索全名“ Manny Nick”的文檔, ID 3應該優先。
在這種情況下,您可能需要針對所需條件修改/提高搜索匹配結果的分數 。 例如,匹配名的文件"Nick"
,並在同一時間修改和增加的文檔的分數包含names
與啟動Nick
使匹配文件Nick
也開始與Nick
將有更高的分數 。
實現此目的的一種方法是使用功能得分查詢。 在下面的查詢中,使用匹配詞組前綴查詢 (附加權重為20)搜索關鍵字“ Nick”,並對匹配文檔的分數進行修改並提高標准“以Nick開頭的名稱” 。
{
"query": {
"function_score": {
"query": {
"match": {
"names": "Nick"
}
},
"boost": "1",
"functions": [
{
"filter": {
"match_phrase_prefix": {
"names": "Nick"
}
},
"weight": 20
}
],
"boost_mode": "sum"
}
}
}
測試:
插入的數據:
{
id:1,
names:["John Wick","Iron man"]
}
{
id:2,
names:["Wick Stone","Nick John"]
}
{
id:3,
names:["Manny Nick","Stone cold"]
}
輸出:
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 20.693148,
"hits": [
{
"_index": "stack_1",
"_type": "1",
"_id": "T9kn5WsBrk7qsVCmKBGH",
"_score": 20.693148,
"_source": {
"id": 2,
"names": [
"Wick Stone",
"Nick John"
]
}
},
{
"_index": "stack_1",
"_type": "1",
"_id": "Ttkm5WsBrk7qsVCm2RF_",
"_score": 20.287682,
"_source": {
"id": 3,
"names": [
"Manny Nick",
"Stone cold"
]
}
}
]
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.