我希望使用模糊搜索進行搜索。使用Luke幫我,如果我搜索具有別名(例如,類似的話),一個字這一切按預期工作:使用Lucene使用沒有別名的詞的模糊搜索
但是如果我輸入一個不具有任何類似的詞的搜索詞(例如串行代碼),搜索失敗,我沒有得到任何結果,即使它應該是有效的:
我需要構建我的搜索以不同的方式?爲什麼我在第二次搜索時沒有像第一次那樣得到同樣的結果,但只有一個「術語」?
我希望使用模糊搜索進行搜索。使用Luke幫我,如果我搜索具有別名(例如,類似的話),一個字這一切按預期工作:使用Lucene使用沒有別名的詞的模糊搜索
但是如果我輸入一個不具有任何類似的詞的搜索詞(例如串行代碼),搜索失敗,我沒有得到任何結果,即使它應該是有效的:
我需要構建我的搜索以不同的方式?爲什麼我在第二次搜索時沒有像第一次那樣得到同樣的結果,但只有一個「術語」?
你還沒有指定Lucene版本,所以我會假設你正在使用6.x.x. 您看到的行爲是Lucene模糊搜索的正確行爲。
參考this我引述
最多,這個查詢將匹配項最多2名編輯。
其中粗略但不是很準確的意思是,如果使用FuzzyQuery
,兩個文字在任意位置最多變爲兩個字符將返回匹配。
下面是我簡單的Java程序,我說明了這裏的一個輸出樣本,
讓我們說三個索引文件有一個字段一樣的價值觀 - 「123456787」,「123456788」,「123456789 「(追加7,8和9 - 12345678)
結果:
未命中找到用於搜索字符串 - > 123456(編輯距離= 3,最後 3位缺失)
3 Docs found!搜索字符串 - > 1234567(編輯距離= 2)
3 Docs found!搜索字符串 - > 12345678(編輯距離= 1)
1 Docs found!搜索字符串 - > 1236787(編輯距離= 2 找到,失蹤4人,5個和最後一個數字爲剩下的兩個文件)
沒有命中發現搜索字符串 - > 123678789(編輯距離= 4, 失蹤4人,5和最後兩位數字)
所以,你應該閱讀更多關於編輯距離。
如果您的要求是匹配N連續字符而不必擔心編輯距離,那麼N-Gram Indexing using NGramTokenizer就是要走的路。
看到這也是更多關於N-Gram
對不起,沒有早日回來。Luke使用Lucene 3.5。 – Sprintstar