首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr boosting与“~”字

Solr boosting与“~”字
EN

Stack Overflow用户
提问于 2018-04-25 17:04:07
回答 2查看 820关注 0票数 1

我想知道,在下面的Solr查询片段中,'~‘字符意味着什么:

代码语言:javascript
复制
... q="field:'value'~30^10 ...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的分数值都会引发以下错误。

代码语言:javascript
复制
org.apache.solr.search.SyntaxError: Fractional edit distances are not allowed!

注意:但是,给出小于1的分数值也默认为2。

所以q=field:term~0.2q=field:term~2有同样的效果

此外,任何大于2的距离也将默认为2,因此在下面的情况下

Q=“字段:值~30”

与(您可以通过查看调试查询来验证这一点)。

Q=“字段:值~2”

这将与最高的数字匹配。编辑。

注:模糊查询中的倾斜度与邻近查询不同。在邻近查询中,在引号之后应用倾斜。例如,下面的查询

q=field:"foo bar"~30

因此,在您的例子中,当您在字段中添加引号时

代码语言:javascript
复制
q="field:'value'~30"  

它正在成为近距离搜索,如果您在该领域中有两个术语,它将真正适用。因此,它不会做太多事情,而不是仅仅找到在“字段”中设置了“值”的文档。

票数 5
EN

Stack Overflow用户

发布于 2018-04-25 18:48:23

在您的示例中,它没有任何意义--但是如果查询中有多个单词,即"foo bar"~30,则意味着“在彼此30个位置内查找foo和bar”。它允许你给一个短语匹配一个关于每个词之间的距离有多近。

^10部分告诉Lucene,与查询的其他部分相比,短语匹配的权重是多少。

来自Lucene查询分析器语法描述

Lucene支持在特定的距离内找到单词。要进行接近搜索,请使用短语末尾的"~"符号。例如,要在文档中以10个单词搜索"apache""jakarta",请使用以下搜索: "jakarta apache"~10

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50027721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档