elasticsearch,proximity,Lucene,elasticsearch,Proximity" /> elasticsearch,proximity,Lucene,elasticsearch,Proximity" />

“的确切含义;Slop“;在Lucene SpanarQuery中(或ElasticSearch span_near中的slop)

“的确切含义;Slop“;在Lucene SpanarQuery中(或ElasticSearch span_near中的slop),lucene,elasticsearch,proximity,Lucene,elasticsearch,Proximity,问题1:在Lucene的span aQuery(或ElasticSearch中span_near)中,slop的确切含义是什么?它是分隔两个匹配单词的单词数,还是分隔的单词数加1 例如,假设您的索引文本是:foobar-biz 哪些查询与此文本匹配:“foo biz”~0,“foo biz”~1,“foo biz”~2 我希望第一个不匹配,最后一个匹配。但是中间呢 问题2:现在是第二个更复杂的推论问题:如果有两个以上的搜索子句,如何处理slop?它是否适用于每一对子句或任何一对子句 例如,假设您

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

例如,假设您的索引文本是:
foobar-biz

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

我希望第一个不匹配,最后一个匹配。但是中间呢

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

例如,假设您构造了一个包含三个子句的
span-arquery
foo
bar
biz
。需要什么样的斜率来匹配上面相同的索引文本?我希望
2
的斜率肯定会,但是
0
1

类似地,对于相同的三子句查询,需要什么样的slop来匹配文本:
foo-bar-ble-biz
问题1:slop是分隔span子句的字数。所以slop 0表示它们是相邻的。在我给出的示例中,斜率为1将匹配

问题2:当有两个以上的span near子句时,每个子句必须至少通过分隔它们的不超过slop的单词连接到另一个子句,并且所有子句必须通过链相互连接。但是,每一个子句不必用斜体字分隔成每一个其他子句

对于问题2中的第一个示例:0、1和2的斜率都匹配。零斜率匹配,即使
foo
biz
被多个子句分隔,因为所有子句都有一个链


对于问题2中的第二个示例:0的slop将不匹配,因为
biz
与所有其他子句之间的间隔超过了0 slop。1的斜率将匹配,因为
foo
bar
用0斜率分隔,另外
bar
biz
用1斜率分隔。它匹配,即使
foo
biz
被多个子句分隔,因为有一个贯穿所有子句的链。斜率2显然是匹配的。

在Span near query中解释了这一点

匹配彼此相邻的跨距。可以指定斜率,即中间不匹配位置的最大数量, 以及是否需要按顺序进行匹配。span near查询映射到Lucene span arquery

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

范例 你想和布什先生匹配,了解他们的详细情况。因为有两个 不相似的词,斜率值为2

Jeorge Willam Bush先生, 肖恩·威廉·布什先生, 詹姆斯·凯恩·布什先生

DSL请求示例-

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

你有一个问题,你可以通过尝试得到确切的答案。是的,我觉得。。。但有时把它写下来会让你头脑中的问题变得清晰。