我試圖使用elasticsearch一次查找多個術語。如何使用elasticsearch一次搜索2個字符串?
更具體地說,當用戶輸入搜索詞如「quake 2」時,我想彈性搜索匹配「quake 2」和「quake ii」。因此,如果遊戲以羅馬數字存儲在系統中,結果將與結果相符。
我將使用PHP來檢測搜索詞中是否存在整數,然後生成與羅馬數字相對應的內容,這應該是直接的,所以我沒有尋求幫助。
這是當我用磚塊牆撞擊到使用elasticsearch的同時查詢兩個字符串的時候。
這裏是什麼,我已經試過一個例子:
$json = '{
"query" : {
"terms" : {
"title" : [ "quake", "crysis" ],
"minimum_should_match" : 1
}
}
}
}';
$searchParams['index'] = 'thegamesdb';
$searchParams['type'] = 'game';
$searchParams['body'] = $json;
$elasticResults = $client->search($searchParams);
上述行爲與預期相同,並返回結果,其中包括地震和光環,具有相當穩健seaach分數爲每個列表。
但是,當我嘗試使用上述查詢來同時搜索「quake 2」和「quake ii」時,我完全沒有點擊?事實上,我已經確定,它似乎是包含標題和數字之間的空格,這會導致彈性搜索關閉。
$json = '{
"query" : {
"terms" : {
"title" : [ "quake 2", "quake ii" ],
"minimum_should_match" : 1
}
}
}
}';
如果在「條款」查詢中不允許有空格,那麼我應該如何執行這種類型的搜索?
效果很好!感謝你的回答! 它在我的遊戲db中發現了281個命中,其中只有9個適合返回,其中7個都是地震的匹配,其中前兩個是「quake ii」的精確匹配,但它確實返回了以下內容最後兩個:「Raiden II」和「Driver 2」。 我試着將「應該」更改爲「必須」,並且我得到了與上面完全相同的最後2場比賽沒有包含地震這個詞。 所以我認爲我的目的,我會用你的答案,但與「必須」,而不是「應」。 非常感謝代碼! +1 – flexage