问题1: 在LuceneSpanNearQuery(或span_nearElasticSearch)中,的确切含义是slop什么?是将两个匹配的单词分隔开的单词数,还是将分隔的单词数加1?
SpanNearQuery
span_near
slop
例如,假设您的索引文本为: foo bar biz
foo bar biz
哪些查询会匹配这样的文字:"foo biz"~0,"foo biz"~1,"foo biz"~2
"foo biz"~0
"foo biz"~1
"foo biz"~2
我希望第一个不匹配,最后一个不匹配。但是中间呢?
问题2: 现在是第二个更复杂的必然问题:slop如果存在两个以上的搜索子句,该如何处理?它适用于 每 对子句还是 任何 对子句。
例如,假设您构建一个SpanNearQuery有三个条款:foo,bar,biz。要匹配上面相同的索引文本,需要多少斜率?我希望2一定会有所收获,但是0还是1呢?
foo
bar
biz
2
0
1
同样,对于相同的三子句查询,需要什么斜率来匹配文本: foo bar ble biz
foo bar ble biz
问题1: Slop是分隔span子句的单词数。因此,坡度0表示它们相邻。在我给出的示例中,斜率1将匹配。
问题2: 当有多个跨度近子句时,每个子句必须与至少一个其他子句连接,且不得超过斜线分隔它们,并且所有子句必须通过一条链相互连接。但是,每个子句不必与其他子句用斜线分隔。
对于第一个问题2的示例:斜率0、1和2都将匹配。即使有零匹配foo,biz也被多个分隔,因为所有子句之间都有一条链。
对于第二个问题2的示例:斜率0将不匹配,因为biz它与所有其他子句之间的斜率大于0。斜率1将匹配,因为foo和bar被0斜率分隔,另外bar,biz被1斜率分隔。即使匹配,foo并且biz也被多个分隔,因为所有子句之间都有一条链。2的斜率显然会匹配。