找到Lucene的拼写错误

时间:2013-08-01 13:43:02

标签: lucene levenshtein-distance fuzzy-search

我想使用Lucene索引/搜索文本。文本可能包含错误的单词,名称等。让Lucene找到包含

的文档的最简单方法是什么?
"this is Licene" 

当用户搜索

"Lucene"? 

这仅适用于演示应用,因此我们需要最简单的解决方案。

2 个答案:

答案 0 :(得分:5)

Lucene的模糊查询并基于Levenshtein编辑距离。

在QueryParser中使用fuzzy query,语法如下:

Lucene~0.5

或者创建一个FuzzyQuery,传递最大数量的修改,例如:

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

注意:Lucene 4.x中的FuzzyQuery不支持比2更大的编辑距离。

答案 1 :(得分:4)

您可以尝试的另一个选择是使用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);

默认情况下,它使用的是LevensteinDistance,但您可以提供自己的自定义编辑距离。