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

例如,假设您的索引文本为:foo bar biz
哪些查询将匹配此文本:"foo biz"~0"foo biz"~1"foo biz"~2
我希望第一个不匹配,最后一个不匹配。但是中间呢?

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

例如,假设您使用三个子句构造SpanNearQuery:foobarbiz。要匹配上面相同的索引文本,需要多少斜率?我希望一定会出现2,但是01呢?

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

最佳答案

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

问题2::如果有两个以上的span近子句,则每个子句必须与至少一个其他子句连接,且不得超过斜线分隔它们,并且所有子句必须通过一条链相互连接。但是,每个子句不必与其他子句用斜线分隔。

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

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

09-10 15:44