“的确切含义;Slop“;在Lucene SpanarQuery中(或ElasticSearch span_near中的slop)
问题1:在Lucene的“的确切含义;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?它是否适用于每一对子句或任何一对子句 例如,假设您
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
}
}
}
}
你有一个问题,你可以通过尝试得到确切的答案。是的,我觉得。。。但有时把它写下来会让你头脑中的问题变得清晰。