我想知道,在下面的Solr查询片段中,'~‘字符意味着什么:
... q="field:'value'~30^10 ...发布于 2018-04-25 18:53:07
在这种情况下,使用~进行模糊搜索。模糊查询基于Levenshtein距离算法。这个algo标识了隐藏一个令牌到另一个令牌所需的最少编辑数。
这是使用的语法:
q=field:term~N
其中N是编辑距离。N的值从0到2不等。
如果没有为N指定任何内容,则使用值2作为默认值。
N=2 ->与最高数量的编辑匹配。
N=0 -> --这意味着不进行编辑,并将产生与术语查询相同的效果。
您可以给出0到1之间的分数值,但是任何大于1的分数值都会引发以下错误。
org.apache.solr.search.SyntaxError: Fractional edit distances are not allowed!注意:但是,给出小于1的分数值也默认为2。
所以q=field:term~0.2和q=field:term~2有同样的效果
此外,任何大于2的距离也将默认为2,因此在下面的情况下
Q=“字段:值~30”
与(您可以通过查看调试查询来验证这一点)。
Q=“字段:值~2”
这将与最高的数字匹配。编辑。
注:模糊查询中的倾斜度与邻近查询不同。在邻近查询中,在引号之后应用倾斜。例如,下面的查询
q=field:"foo bar"~30
因此,在您的例子中,当您在字段中添加引号时
q="field:'value'~30" 它正在成为近距离搜索,如果您在该领域中有两个术语,它将真正适用。因此,它不会做太多事情,而不是仅仅找到在“字段”中设置了“值”的文档。
发布于 2018-04-25 18:48:23
在您的示例中,它没有任何意义--但是如果查询中有多个单词,即"foo bar"~30,则意味着“在彼此30个位置内查找foo和bar”。它允许你给一个短语匹配一个关于每个词之间的距离有多近。
^10部分告诉Lucene,与查询的其他部分相比,短语匹配的权重是多少。
Lucene支持在特定的距离内找到单词。要进行接近搜索,请使用短语末尾的
"~"符号。例如,要在文档中以10个单词搜索"apache"和"jakarta",请使用以下搜索:"jakarta apache"~10
https://stackoverflow.com/questions/50027721
复制相似问题