我想知道,'〜'以下Solr
查询摘要中的字符含义:
... q="field:'value'~30^10 ...
答案 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.2
与q=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