原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-span-not-query.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/query-dsl-span-not-query.html

span_not 查询edit

删除与另一个 span 查询重叠的匹配项,或者位于另一个 span 查询之前的 x 标记(由参数 pre 控制) 或 之后的 y 标记(由参数 post 控制) 内的匹配项。 span_not 查询对应 Lucene 的 SpanNotQuery。这里有一个例子:

GET /_search
{
    "query": {
        "span_not": {
            "include": {
                "span_term": {"field1": "hoya"}
            },
            "exclude": {
                "span_near": {
                    "clauses": [
                        {"span_term": {"field1": "la"}},
                        {"span_term": {"field1": "hoya"}}
                    ],
                    "slop": 0,
                    "in_order": true
                }
            }
        }
    }
}

includeexclude 子句可以是任何 span 类型的查询。 include 子句是过滤匹配项的 span 查询,exclude 子句是匹配项不能与返回项重叠的 span 查询。

在上面的例子中,除了前面有la的文档之外,所有带有hoya的文档都被过滤了。

其他顶级选项有:

pre

如果设置了,则包含 span 之前的词元数量不能与 exclude span 重叠。 默认值为 0。

post

如果设置了,则包含 span 后的词元数量不能与 exclude span 重叠。 默认值为 0。

dist

如果设置了,包含 span 内的词元数量不能与 exclude span 重叠。 相当于设置了 prepost