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安装中自动调用(我不记得基本语法发生了变化)