一尘不染

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

elasticsearch

问题1:
在LuceneSpanNearQuery(或span_nearElasticSearch)中,的确切含义是slop什么?是将两个匹配的单词分隔开的单词数,还是将分隔的单词数加1?

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

哪些查询会匹配这样的文字:"foo biz"~0"foo biz"~1"foo biz"~2

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

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

例如,假设您构建一个SpanNearQuery有三个条款:foobarbiz。要匹配上面相同的索引文本,需要多少斜率?我希望2一定会有所收获,但是0还是1呢?

同样,对于相同的三子句查询,需要什么斜率来匹配文本: foo bar ble biz


阅读 479

收藏
2020-06-22

共1个答案

一尘不染

问题1: Slop是分隔span子句的单词数。因此,坡度0表示它们相邻。在我给出的示例中,斜率1将匹配。

问题2:
当有多个跨度近子句时,每个子句必须与至少一个其他子句连接,且不得超过斜线分隔它们,并且所有子句必须通过一条链相互连接。但是,每个子句不必与其他子句用斜线分隔。

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

对于第二个问题2的示例:斜率0将不匹配,因为biz它与所有其他子句之间的斜率大于0。斜率1将匹配,因为foobar被0斜率分隔,另外barbiz被1斜率分隔。即使匹配,foo并且biz也被多个分隔,因为所有子句之间都有一条链。2的斜率显然会匹配。

2020-06-22