Solr模糊搜索奇怪的案例

时间:2015-07-01 10:28:36

标签: solr lucene fuzzy-search

我正在使用复杂的短语查询实现solr模糊搜索。 但我正在分阶段审理一个案件: q={!complexphrase}name:"woo~1 grou~2"返回" 木组"结果是。 q={!complexphrase}name:"woo~1 gro~2" 返回" 木组"。 gro和group之间的距离是2!

搜索此查询: q={!complexphrase}name:"Anderso~1 Interes~2"返回' Anderson兴趣'。 Interes和Interests之间的延迟与gro和group相同!!!

任何想法是什么原因?

1 个答案:

答案 0 :(得分:3)

我相信你遇到了查询重写的问题。

任何多项查询(模糊查询,前缀查询等)都会在Lucene中扩展为与其匹配的确切术语。尽管如此,可以通过这种方式生成的术语数量最多,因此在重写查询时,它只会尝试在该限制内选择最佳。我怀疑gro~2的匹配太多了。

也许你会觉得很奇怪,有这么多的匹配,它不能将所有这些匹配到查询中。看起来你正试图搜索以gro开头的单词,最后还有两个字母。有多少可以?但那不是你正在寻找的东西。模糊查询基于levenshtein距离。该术语的匹配包括:

  • g__ - 以g
  • 开头的三个字母的单词
  • _r_ - 中间带有r的三个字母的单词
  • __o - 三个字母的单词,最后带有o
  • gr__ - 以gr
  • 开头的任何四个字母的单词

简而言之,它可以匹配大量术语列表,而在相似度算法方面,“arm”和“cron”匹配就像“group”一样。

如果确实只想匹配以“gro”开头的字词,请使用前缀查询:"woo* gro*"

如果您想使用模糊查询进行实际搜索,包括上面列出的可能匹配项,您可以在solrconfig's query section中放大MaxBooleanClauses

<query>
  <maxBooleanClauses>1024</maxBooleanClauses>