Lucene SpanNearQuery中"Slop"的确切含义(或ElasticSearch span_near中的slop)



问题1: 在Lucene的SpanNearQuery(或ElasticSearch中的span_near)中,slop的确切含义是什么?是分隔两个匹配单词的单词数,还是分隔单词数加1?

例如,假设您的索引文本是:foo bar biz

哪些查询将与此文本匹配:"foo biz"~0"foo biz"~1"foo biz"~2

我预计第一个不会匹配,最后一个会匹配。但是中间呢?

问题2: 现在是第二个更复杂的推论问题:如果有两个以上的搜索子句,如何处理slop?它适用于每对子句还是任何对子句。

例如,假设您构造了一个包含三个子句的SpanNearQueryfoobarbiz。需要什么slop来匹配上面相同的索引文本?我预计2的斜率肯定会,但01呢?

类似地,对于相同的三子句查询,需要什么slop来匹配文本:foo bar ble biz

问题1: Slop是分隔span子句的字数。所以斜率0意味着它们是相邻的。在我举的例子中,slop为1会匹配。

问题2: 当有两个以上的span near子句时,每个子句必须通过不超过分隔它们的slop字连接到至少一个其他子句,并且所有子句必须通过链相互连接。然而,每一个从句不需要用其他从句的助词来分隔。

对于问题2中的第一个示例:斜率0、1和2都将匹配。零的斜率匹配,即使foobiz相隔不止一个,因为所有子句都有一条链。

对于问题2中的第二个示例:0的slop将不匹配,因为biz与所有其他子句的间隔超过0 slop。1的斜率将匹配,因为foobar由0斜率分隔,此外barbiz由1斜率分隔。即使foobiz相隔不止一个,它也会匹配,因为所有子句都有一条链。斜率为2显然会匹配。

在查询附近的Span中进行了解释

匹配彼此靠近的跨度。可以指定slop、介入的不匹配位置的最大数量,以及是否需要按顺序进行匹配。spannear查询映射到Lucene SpanNearQuery。

正式文件-https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-near-query.html

示例你想与布什先生匹配,了解他们的详细情况。既然有两个不相似的单词,slop值为2

Mr。杰奥尔格·威拉姆·布什,肖恩·威拉姆·布什先生,James Kane Bush先生

DSL请求示例-

GET school/_search
{
"query":{
"match_phrase": {
"EmpName":
{
"query": "Mr. Bush",
"slop":2
}

}
}
}

相关内容

  • 没有找到相关文章

最新更新