Solr增强和'~';性格
我想知道,在下面的Solr增强和'~';性格,solr,Solr,我想知道,在下面的Solr查询片段中,“~”字符是什么意思: ... q="field:'value'~30^10 ... 在您的示例中,它没有任何意义-但是如果您的查询中有多个单词,即“foo bar”~30,它将意味着“查找彼此相距30个位置内的foo和bar”。它允许你给一个短语匹配一个空白,关于每个词之间的距离 ^10部分告诉Lucene与查询的其他部分相比,短语匹配的权重是多少 发件人: Lucene支持查找特定距离内的单词。要进行近距离搜索,请在短语末尾使用波浪号,“~”,符号。例
Solr
查询片段中,“~”字符是什么意思:
... q="field:'value'~30^10 ...
在您的示例中,它没有任何意义-但是如果您的查询中有多个单词,即
“foo bar”~30
,它将意味着“查找彼此相距30个位置内的foo和bar”。它允许你给一个短语匹配一个空白,关于每个词之间的距离
^10
部分告诉Lucene与查询的其他部分相比,短语匹配的权重是多少
发件人:
Lucene支持查找特定距离内的单词。要进行近距离搜索,请在短语末尾使用波浪号,“~”
,符号。例如,要在文档中搜索相隔10个单词的“apache”
和“jakarta”
,请使用搜索:
“雅加达阿帕奇”~10
在您的示例中,它没有任何意义-但是如果您的查询中有多个单词,即
“foo bar”~30
,它将意味着“查找彼此相距30个位置内的foo和bar”。它允许你给一个短语匹配一个空白,关于每个词之间的距离
^10
部分告诉Lucene与查询的其他部分相比,短语匹配的权重是多少
发件人:
Lucene支持查找特定距离内的单词。要进行近距离搜索,请在短语末尾使用波浪号,“~”
,符号。例如,要在文档中搜索相隔10个单词的“apache”
和“jakarta”
,请使用搜索:
“雅加达阿帕奇”~10
在这种情况下,
~
用于执行模糊搜索。
模糊查询基于Levenshtein距离算法。此算法识别将一个令牌转换为另一个令牌所需的最小编辑次数
这是使用的语法:
q=字段:术语~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”
将匹配最高数量的编辑
注:
模糊查询中的瓷砖与邻近查询中的瓷砖不同。在邻近查询中,波浪号应用于引号之后。
e、 g以下查询
q=字段:“foo bar”~30
因此,在您的例子中,当您在字段周围添加引号时
q="field:'value'~30"
它正在变成近距离搜索,如果你在这个领域有两个术语,它就真的适用了。因此,它不会做很多事情,而只是查找在“字段”中设置了“值”的文档。
~
在这种情况下用于进行模糊搜索。
模糊查询基于Levenshtein距离算法。此算法识别将一个令牌转换为另一个令牌所需的最小编辑次数
这是使用的语法:
q=字段:术语~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”
将匹配最高数量的编辑
注:
模糊查询中的瓷砖与邻近查询中的瓷砖不同。在邻近查询中,波浪号应用于引号之后。
e、 g以下查询
q=字段:“foo bar”~30
因此,在您的例子中,当您在字段周围添加引号时
q="field:'value'~30"
它正在变成近距离搜索,如果你在这个领域有两个术语,它就真的适用了。因此,它不会做很多事情,而只是查找在“字段”中设置了“值”的文档。你确定吗?使用
“
或”
时,术语短语搜索在我们的4.10.2安装中自动调用(我不记得这方面的基本语法发生了变化)。为字段:“value”~2
返回的点击与为字段:“value”返回的点击相同“
,而为字段:value~2
返回的命中也包括模糊匹配。是。因此field:“value”~2
或field:“value”~2
将调用邻近搜索,因为这里只有一个术语,所以只使用“field:“value”~2就变得微不足道了。然而,如果我们不添加引号,那么它将变成模糊搜索。我想在我的回答中,我在没有意识到的情况下添加了单引号。谢谢你指出这一点。我会更新答案。是的-但问题在字段名前有单引号(…和一个常规引号,这很奇怪-但现在让我们忽略它),因此是短语搜索,而不是模糊搜索。你确定吗?当使用“
或”
时,术语短语搜索在我们的4.10.2安装中自动调用(我不记得基本语法发生了变化)