Solr提升和'〜'字符

时间:2018-04-25 17:04:07

标签: solr

我想知道,'〜'以下Solr查询摘要中的字符含义:

... q="field:'value'~30^10 ...

2 个答案:

答案 0 :(得分:3)

在这种情况下,

~用于进行模糊搜索。 模糊查询基于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.2q=field:term~2

具有相同的效果

任何大于2的距离也将默认为2。 所以在下面的例子中

  

Q ="字段:值〜30"

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

  

Q ="字段:值〜2"

将匹配最高编号。编辑。

注意: 模糊查询中的波浪号与接近查询不同。在邻近查询中,在引号后应用波浪号。 例如下面的查询

  

q = field:" foo bar" ~30

所以在你的情况下,你在字段中添加引号

q="field:'value'~30"  

它正在成为邻近搜索,如果你在这个领域有两个术语,这真的适用。所以它不会做太多而不只是找到具有"价值"设置在"字段"。

答案 1 :(得分:2)

在您的示例中,它没有任何意义 - 但如果您的查询中有多个单词,即"foo bar"~30,则表示"在彼此的30个位置内找到foo和bar"。它允许您给出一个与每个术语彼此接近程度相关的保证金。

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

来自the Lucene Query Parser Syntax description

  

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

     

"jakarta apache"~10