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>
我正在使用复杂的短语查询实现 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>