2013-07-03 40 views
0

對不起,這個糟糕的標題,但讓我解釋我遇到的問題。我目前正在開發一個項目,其中的一部分包括一個地址搜索引擎,這是我在elasticsearch中的一個搜索引擎。我想要做的是在我的搜索欄中輸入新字符以生成自動完成結果並嘗試「猜測」用戶正在鍵入哪個(〜100萬個)地址時使用fuzzy_like_this_field查詢。elasticserch結果數fuzzy_like_this_field影響「好」結果正在返回

我的問題是,我目前對我的查詢有一個大小限制,因爲返回所有結果都是不必要的,而且花費時間。我的問題是,除非我從查詢中返回1000個或更多結果,否則我通常不會得到「正確」的結果。例如,如果我在試圖搜索「100百老匯」時輸入「100寬」,並且我只返回200個結果(關於我可以做的最大值,而不花費太長時間),100百老匯無處可尋,儘管所有返回的結果比我想要的結果具有更高的levenshtein距離。如果我從查詢中返回2000個結果,我會得到「100 broadway」作爲第一個結果,但這需要很長時間。我甚至無法過濾返回的結果,將正確的結果帶到頂端,因爲它沒有被返回。

不應該在查詢返回N的大小限制返回最好的N個結果,而不是一個看似隨機的子集?

對不起,如果這是措辭不當或太模糊。

回答

0

我想你可能會對fuzzy_like_this query有一些誤解。

如模糊化提供的字符串的所有條款,然後挑選最好N個區分條件......對於每一個源項模糊變體在沒有座標因子BooleanQuery舉行...

如果您只需要一個基於Levenshtein距離的模糊搜索,使用fuzzy query

0

您可以使用邊緣ngram標記器來編寫自定義分析器,它可以幫助您實現要查找的內容。發現這裏的elasticsearch https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_time_search_as_you_type.html

證明的技術然後做一個簡單的查詢,如

{ 
    "query": { 
     "match":{ 
      "address": "100 Broadway" 
     } 
     } 
} 

會做你的工作。你也可以考慮使用不同的分析儀進行搜索,這也在教程中顯示(最後)。這將使您能夠執行諸如標記化搜索查詢並以與索引分析不同的方式對其進行預處理的內容。