Search &引用;你是说;Lucene.net中的功能

Search &引用;你是说;Lucene.net中的功能,search,lucene,Search,Lucene,有人能告诉我如何在Lucene.net中实现“你的意思是什么”功能吗 谢谢 AFAIK Lucene支持近距离搜索,这意味着如果您使用以下内容: 字段:stirng~0.5 (这是一个波浪符号) 将匹配“字符串”。浮动是指搜索的“容忍度”,其中1.0表示完全匹配,0.0表示匹配所有内容(某种程度上) 然而,不同的解析器将以不同的方式实现这一点 近似搜索比模糊搜索(stri*)慢得多,因此请谨慎使用。在您的案例中,我们会假设,如果您在常规搜索中没有找到匹配项,您会尝试进行近似搜索以查看您找到的内容

有人能告诉我如何在Lucene.net中实现“你的意思是什么”功能吗


谢谢

AFAIK Lucene支持近距离搜索,这意味着如果您使用以下内容:

字段:stirng~0.5

(这是一个波浪符号)

将匹配“字符串”。浮动是指搜索的“容忍度”,其中1.0表示完全匹配,0.0表示匹配所有内容(某种程度上)

然而,不同的解析器将以不同的方式实现这一点

近似搜索比模糊搜索(stri*)慢得多,因此请谨慎使用。在您的案例中,我们会假设,如果您在常规搜索中没有找到匹配项,您会尝试进行近似搜索以查看您找到的内容,并根据结果以某种方式呈现“您的意思是什么”

出于性能原因,可能有助于缓存此类查找,以查找非常常见的拼写错误。

谷歌的“你的意思是什么?”是通过查阅他们的查询日志来实现的(当然可能是保密的)。查看搜索您正在处理的查询的人是否在不久之后搜索到了非常相似的内容;如果是这样,这表明他们犯了一个错误,并意识到他们应该寻找什么

因为您可能没有庞大的查询日志,所以可以对其进行近似计算。进行查询,拆分术语,查看数据库中是否有类似的术语(通过编辑距离,无论什么);用附近的术语替换您的术语,然后重新运行查询。如果你的点击率更高,这可能是一个更好的查询。向用户推荐。(由于您已经获得了点击率,而且大多数人只查看前2名的结果,请向他们展示这些结果。)

您应该查看contrib目录中的模块。它是JavaLucene模块的一个端口,因此它应该很有用

(来自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);

看看名为semanticvectors的google代码项目。 在Lucene邮件列表上有大量的讨论,讨论的是如何实现功能,比如您在使用它之后所做的事情——但是它是用java编写的


您可能需要在搜索日志上解析并使用一些机器学习算法来构建这样的功能

这是正确的答案,应该被接受!正是我想要的;)拼写检查器模块移动了:这里有一个关于“你的意思是什么”的简单解释,这是一个非常有趣的阅读。