Solr模糊搜索怪异案例

Solr Fuzzy Search Weird Case

我正在使用复杂的短语查询实现 solr 模糊搜索。 但我正在处理一个奇怪的案例: q={!complexphrase}name:"woo~1 grou~2" return “木组”结果。 q={!complexphrase}name:"woo~1 gro~2" return “木组”。 虽然 gro 和组之间的距离是 2!

正在搜索此查询: q={!complexphrase}name:"Anderso~1 Interes~2" returns 'Anderson Interests'。 Interes 与 Interests 之间的 duistance 与 gro 和 group 相同!!!

知道是什么原因吗?

我相信您 运行 遇到了查询重写的问题。

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

的匹配项太多了

您可能会觉得奇怪,因为匹配项太多,以至于无法将所有匹配项合并到查询中。看起来您正在尝试搜索以 gro 开头,并在末尾附加最多两个字母的单词。能有多少?但是 不是 您要搜索的内容。模糊查询基于编辑距离。该词的匹配项包括:

  • g__ -- 以 g
  • 开头的三个字母的单词
  • _r_ -- 中间带 r 的三字母单词
  • __o -- 结尾带 o 的三个字母的单词
  • gr__ -- 任何以 gr
  • 开头的四字母单词
  • 等等

简而言之,它可以匹配海量的项列表,并且在相似度算法方面,"arm"和"cron"匹配得很好"group".


如果您 真的 只想匹配以 "gro" 开头的字词,请改用前缀查询:"woo* gro*".

如果您想使用模糊查询进行实际搜索,包括上面看到的可能匹配列表,您可以在 solrconfig's query section.

中放大 MaxBooleanClauses
<query>
  <maxBooleanClauses>1024</maxBooleanClauses>