2013-08-01 27 views
2

我想用Lucene來索引/搜索文本。該文本可包含錯別字,姓名等什麼是獲得Lucene來查找包含用Lucene查找錯字

"this is Licene" 

當用戶搜索一個文件用於

"Lucene"? 

的最簡單的辦法這只是一個演示應用程序,所以我們需要最簡單的解決方案。

回答

4

Lucene的模糊查詢和基於Levenshtein編輯距離。

在QueryParser的使用fuzzy query,語法,如:

Lucene~0.5 

或者創建一個FuzzyQuery,通過在編輯的最大數量,是這樣的:

Query query = new FuzzyQuery(new Term("field", "lucene"), 1); 

注:FuzzyQuery,在Lucene 4.x不支持比2更大的編輯距離。

+0

感謝您的回答。我等待其他方法或方法浮出水面,看起來這是要走的路。 – bpgergo

3

另一個可以嘗試的選擇是使用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); 

默認情況下,它使用的是編輯距離,但你可以提供自己的自定義編輯距離。