2016-12-16 67 views
0

我目前面臨的主要挑戰之一是如何匹配應用模糊性的長字符串。如何匹配長字符串?

例如,讓我們說,我們有以下文件:

PUT my_index/type/2 
{ 
    "name":"longnameyesverylong" 
} 

,如果我申請一個模糊搜索該名稱,如下所示:

"match": { 
      "name": { 
       "query": "longnameyesverylong", 
       "fuzziness": 2 
      } 

我能找到它,但我目標是能夠打開網絡並允許這種類型的字符串出現兩個以上的錯誤。

比方說,例如,我的索引類似:

PUT my_index/type/2 
{ 
    "name":"l1ngnam2yesver3long" 
} 

前面的匹配查詢將無法找到這個文件,內容模糊性大於2和未在ES支持。

我試圖使用ngrams,但令牌不符合要求,並且索引會變得太多。

,我有我的頭頂部的唯一的選擇是在索引時間創建我「自己的標記生成器」手動分割字符串和創建文檔,看起來像

PUT my_index/type/2 
    { 
     "name":"longnamey esverylong" 
    } 

,然後在搜索時,再次分割字符串並在每個標記上應用模糊的布爾查詢。這可能可以做我所需要的,但是我覺得這個問題可能有更好的解決方案。

是否還有其他方法可供您選擇?

謝謝。

+0

您使用的是什麼版本的彈性搜索? – root545

+0

@ root545我使用的是2.x – Yeikel

回答

0

問題解決。他們關鍵的問題是pattern_capture過濾器。