Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr模糊搜索奇案_Solr_Lucene_Fuzzy Search - Fatal编程技术网

Solr模糊搜索奇案

Solr模糊搜索奇案,solr,lucene,fuzzy-search,Solr,Lucene,Fuzzy Search,我正在使用复杂短语查询实现solr模糊搜索。 但我正在分阶段处理一个weired案件: q={!complexprase}名称:“woo~1 grou~2”return“wood group”。 q={!complexprase}名称:“woo~1 gro~2”不返回“木材组”。 虽然gro和团队之间的距离是2 正在搜索此查询: q={!complexprase}name:“Anderso~1 interest~2”返回“Anderson interest”。 利益和利益之间的距离和集团和集团是

我正在使用复杂短语查询实现solr模糊搜索。 但我正在分阶段处理一个weired案件:
q={!complexprase}名称:“woo~1 grou~2”
return“wood group”。
q={!complexprase}名称:“woo~1 gro~2”
不返回“木材组”。 虽然gro和团队之间的距离是2

正在搜索此查询:
q={!complexprase}name:“Anderso~1 interest~2”
返回“Anderson interest”。 利益和利益之间的距离和集团和集团是一样的


知道原因吗?

我相信您在查询重写方面遇到了问题

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

也许您会觉得奇怪,因为有这么多匹配项,所以无法将它们全部合并到查询中。看起来您正在尝试搜索以gro开头的单词,并且在末尾加上最多两个字母。会有多少人?但那不是你要找的。模糊查询基于levenshtein距离。该术语的匹配项包括:

  • g\uuu
    ——以g开头的三个字母的单词
  • \u r\u
    ——三个字母的单词,中间有一个r
  • \uuuo
    ——三个字母的单词,末尾有一个o
  • gr\uu
    ——任何以gr开头的四个字母的单词
  • 等等
简而言之,它可以匹配大量的术语列表,在相似性算法方面,“arm”和“cron”与“group”一样匹配


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

如果您想实际使用模糊查询进行搜索,包括上面看到的可能匹配项列表,您可以在您的数据库中放大
maxbooleansclauses


1024

我相信您在查询重写方面遇到了问题

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

也许您会觉得奇怪,因为有这么多匹配项,所以无法将它们全部合并到查询中。看起来您正在尝试搜索以gro开头的单词,并且在末尾加上最多两个字母。会有多少人?但那不是你要找的。模糊查询基于levenshtein距离。该术语的匹配项包括:

  • g\uuu
    ——以g开头的三个字母的单词
  • \u r\u
    ——三个字母的单词,中间有一个r
  • \uuuo
    ——三个字母的单词,末尾有一个o
  • gr\uu
    ——任何以gr开头的四个字母的单词
  • 等等
简而言之,它可以匹配大量的术语列表,在相似性算法方面,“arm”和“cron”与“group”一样匹配


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

如果您想实际使用模糊查询进行搜索,包括上面看到的可能匹配项列表,您可以在您的数据库中放大
maxbooleansclauses


1024

我相信您在查询重写方面遇到了问题

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

也许您会觉得奇怪,因为有这么多匹配项,所以无法将它们全部合并到查询中。看起来您正在尝试搜索以gro开头的单词,并且在末尾加上最多两个字母。会有多少人?但那不是你要找的。模糊查询基于levenshtein距离。该术语的匹配项包括:

  • g\uuu
    ——以g开头的三个字母的单词
  • \u r\u
    ——三个字母的单词,中间有一个r
  • \uuuo
    ——三个字母的单词,末尾有一个o
  • gr\uu
    ——任何以gr开头的四个字母的单词
  • 等等
简而言之,它可以匹配大量的术语列表,在相似性算法方面,“arm”和“cron”与“group”一样匹配


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

如果您想实际使用模糊查询进行搜索,包括上面看到的可能匹配项列表,您可以在您的数据库中放大
maxbooleansclauses


1024

我相信您在查询重写方面遇到了问题

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

也许您会觉得奇怪,因为有这么多匹配项,所以无法将它们全部合并到查询中。看起来您正在尝试搜索单词beg
<query>
  <maxBooleanClauses>1024</maxBooleanClauses>