有人可以告诉我如何在Lucene.net中实现“你的意思”功能吗?
谢谢!
答案 0 :(得分:35)
您应该查看contrib目录中的SpellChecker模块。它是Java lucene的SpellChecker模块的一个端口,因此它的documentation应该会有所帮助。
(来自javadocs :)
示例用法:
import org.apache.lucene.search.spell.SpellChecker;
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);
答案 1 :(得分:6)
AFAIK Lucene支持接近搜索,这意味着如果您使用以下内容:
字段:stirng〜0.5
(这是一个波浪号)
将匹配“string”。浮点数是搜索的“容忍度”,其中1.0是精确匹配,0.0是匹配所有(排序)。
然而,不同的解析器将以不同的方式实现它。邻近搜索比模糊搜索(stri *)慢得多,因此请谨慎使用。在您的情况下,人们会认为如果您在常规搜索中找不到匹配项,那么您可以尝试进行邻近搜索以查看您找到的内容,并根据结果以某种方式显示“您的意思是”。
出于性能原因,可能有助于缓存这种非常常见的错误拼写查找。
答案 2 :(得分:1)
由于您可能没有庞大的查询日志,因此您可以对其进行近似。进行查询,拆分条款,查看数据库中是否有类似的术语(通过编辑距离,等等);将这些条款替换为附近的条款,然后重新运行查询。如果你获得更多的点击量,这可能是一个更好的查询。建议用户。 (既然你已经获得了点击量,大多数人只会查看前2个结果,请向他们展示。)
答案 3 :(得分:0)
看一下名为semanticvectors的谷歌代码项目。 在Lucene邮件列表上进行了大量的讨论,以便像使用它一样进行功能 - 但它是用java编写的。
您可能需要在搜索日志上解析并使用一些机器学习算法来构建这样的功能!