我想使用 Lucene 来索引/搜索文本。文本可能包含输入错误的单词、名称等。让 Lucene 找到包含以下内容的文档的最简单方法是什么?
"this is Licene"
当用户搜索
"Lucene"?
这仅适用于演示应用程序,因此我们需要最简单的解决方案。
我想使用 Lucene 来索引/搜索文本。文本可能包含输入错误的单词、名称等。让 Lucene 找到包含以下内容的文档的最简单方法是什么?
"this is Licene"
当用户搜索
"Lucene"?
这仅适用于演示应用程序,因此我们需要最简单的解决方案。
Lucene 的模糊查询和基于 Levenshtein 的编辑距离。
在 QueryParser 中使用模糊查询,语法如下:
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);
默认情况下,它使用 LevensteinDistance,但您可以提供自己的自定义编辑距离。