Span not 查询

编辑

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

resp = client.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
                }
            }
        }
    },
)
print(resp)
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
const response = await client.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,
        },
      },
    },
  },
});
console.log(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 之前的 token 数量不得与 exclude span 重叠。默认为 0。

post

如果设置,则 include span 之后的 token 数量不得与 exclude span 重叠。默认为 0。

dist

如果设置,则 include span 内的 token 数量不得与 exclude span 重叠。等效于同时设置 prepost