跨度多词项查询

编辑

span_multi 查询允许你将一个 多词项查询 (通配符、模糊、前缀、范围或正则查询之一) 包裹为 跨度查询,这样就可以进行嵌套。示例:

resp = client.search(
    query={
        "span_multi": {
            "match": {
                "prefix": {
                    "user.id": {
                        "value": "ki"
                    }
                }
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      span_multi: {
        match: {
          prefix: {
            'user.id' => {
              value: 'ki'
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    span_multi: {
      match: {
        prefix: {
          "user.id": {
            value: "ki",
          },
        },
      },
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "span_multi": {
      "match": {
        "prefix": { "user.id": { "value": "ki" } }
      }
    }
  }
}

还可以为查询关联一个提升(boost)。

resp = client.search(
    query={
        "span_multi": {
            "match": {
                "prefix": {
                    "user.id": {
                        "value": "ki",
                        "boost": 1.08
                    }
                }
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      span_multi: {
        match: {
          prefix: {
            'user.id' => {
              value: 'ki',
              boost: 1.08
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    span_multi: {
      match: {
        prefix: {
          "user.id": {
            value: "ki",
            boost: 1.08,
          },
        },
      },
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "span_multi": {
      "match": {
        "prefix": { "user.id": { "value": "ki", "boost": 1.08 } }
      }
    }
  }
}

如果匹配查询的词项数量超过 indices.query.bool.max_clause_count 搜索设置span_multi 查询将会触发“过多子句失败”错误。为了避免无限扩展,你可以将多词项查询的 重写方法 设置为 top_terms_* 重写。或者,如果仅在 prefix 查询上使用 span_multi,则可以激活 text 字段的 index_prefixes 字段选项。这将把该字段上的任何前缀查询重写为与索引前缀匹配的单个词项查询。