Lucene模糊搜索整个文本

时间:2016-04-27 14:40:59

标签: java search lucene full-text-search fuzzy-search

在Lucene,我可以使用模糊搜索来获得相似的'结果

例如,以下查询:

text:awesome~0.8

会发现这些文件有80%的相似文字,例如' awesom'。

我的问题是,我可以对整个文本(多个单词)使用模糊搜索吗?

例如,我想找到80%类似的文字到以下文字:

  

这是我的带有多个单词的文字

在每个单词上加上模糊子句不会给我想要的结果:

text:(+this~0.8 +is~0.8 +my~0.8 +text~0.8 +with~0.8 +multiple~0.8 +words~0.8)

因为它只返回那些包含查询中指定的所有单词(或每个单词的80%相似单词)的文档。

我希望查询返回结果,其中整个字符串的相似度为80%(即使它没有整个单词),例如:

  

这是包含多个单词的文字

像这样 -

text:(+this +is +my +text +with +multiple +words)~0.8

显然上面的查询给出了语法错误,但我需要根据整个文本/短语的相似性得到结果。

我很高兴为此目的使用Java API类,因为我需要在Java程序中使用它。

1 个答案:

答案 0 :(得分:1)

我不确定Lucene中是否允许模糊查询的浮动相似性。从lucene-4.0及更高版本开始,FuzzyQuery支持最多2个编辑距离。

假设您希望编辑距离为2.您可以在索引字段时使用关键字分析器。这不会标记您的字段值。在搜索时,您可以将FuzzyQuery与包含​​全文的术语一起使用。

此解决方案的局限性:

  • 最大编辑距离为2。
  • 我们假设您正在查找的是该字段的完整值。例如,如果您索引的值是“这是我的文字”,那么如果您使用“这是 ny ”[在查询中出错]进行搜索,则无法获得该文件。如果您将此文档视为“这是 ny 文本”,则可以获取此文档。