Span not 查询编辑

移除与另一个 Span 查询重叠的匹配项,或者移除在另一个 Span 查询之前 x 个词元(由参数 pre 控制)或之后 y 个词元(由参数 post 控制)的匹配项。以下是一个示例:

response = client.search(
  body: {
    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
          }
        }
      }
    }
  }
)
puts response
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 查询。

在上面的示例中,所有包含词条 hoya 的文档都会被过滤,但前面有 la 的文档除外。

其他顶级选项

pre

如果设置,则 include Span 之前的词元数量不能与 exclude Span 重叠。默认为 0。

post

如果设置,则 include Span 之后的词元数量不能与 exclude Span 重叠。默认为 0。

dist

如果设置,则 include Span 内的词元数量不能与 exclude Span 重叠。相当于同时设置 prepost