我想用Lucene來索引/搜索文本。該文本可包含錯別字,姓名等什麼是獲得Lucene來查找包含用Lucene查找錯字
"this is Licene"
當用戶搜索一個文件用於
"Lucene"?
的最簡單的辦法這只是一個演示應用程序,所以我們需要最簡單的解決方案。
我想用Lucene來索引/搜索文本。該文本可包含錯別字,姓名等什麼是獲得Lucene來查找包含用Lucene查找錯字
"this is Licene"
當用戶搜索一個文件用於
"Lucene"?
的最簡單的辦法這只是一個演示應用程序,所以我們需要最簡單的解決方案。
Lucene的模糊查詢和基於Levenshtein編輯距離。
在QueryParser的使用fuzzy query,語法,如:
Lucene~0.5
或者創建一個FuzzyQuery,通過在編輯的最大數量,是這樣的:
Query query = new FuzzyQuery(new Term("field", "lucene"), 1);
注:FuzzyQuery
,在Lucene 4.x不支持比2更大的編輯距離。
另一個可以嘗試的選擇是使用Lucene SpellChecker:
http://lucene.apache.org/core/6_4_0/suggest/org/apache/lucene/search/spell/SpellChecker.html
這是一個開箱的,而且很容易使用:
SpellChecker spellchecker = new SpellChecker(spellIndexDirectory);
// To index a field of a user index:
spellchecker.indexDictionary(new LuceneDictionary(my_lucene_reader, a_field));
// To index a file containing words:
spellchecker.indexDictionary(new PlainTextDictionary(new File("myfile.txt")));
String[] suggestions = spellchecker.suggestSimilar("misspelt", 5);
默認情況下,它使用的是編輯距離,但你可以提供自己的自定義編輯距離。
感謝您的回答。我等待其他方法或方法浮出水面,看起來這是要走的路。 – bpgergo