Link Search Menu Expand Document Documentation Menu

Span 字段掩码查询

field_masking_span 查询允许 span 查询通过“掩盖”查询的真实字段来匹配不同字段。这在使用多字段(相同内容使用不同分析器索引)时特别有用,或者当您需要跨不同字段运行 span_nearspan_or 等 span 查询(通常不允许)时。

例如,您可以使用 field_masking_span 查询来

  • 匹配原始字段及其词干化版本中的词条。
  • 在单个 span 操作中合并不同字段上的 span 查询。
  • 处理使用不同分析器索引的相同内容。

使用字段掩码时,相关性评分是使用掩码字段的特性(规范)而不是实际搜索的字段来计算的。这意味着如果掩码字段的属性(如长度或提升值)与搜索的字段不同,您可能会收到意外的评分结果。

示例

要尝试本节中的示例,请完成设置步骤

以下查询在词干字段中搜索单词“long”附近“sleeve”的变体

GET /clothing/_search
{
  "query": {
    "span_near": {
      "clauses": [
        {
          "span_term": {
            "description": "long"
          }
        },
        {
          "field_masking_span": {
            "query": {
              "span_term": {
                "description.stemmed": "sleev"
              }
            },
            "field": "description"
          }
        }
      ],
      "slop": 1,
      "in_order": true
    }
  }
}

该查询匹配文档 1 和 4

  • 词条“long”出现在两个文档的 description 字段中。
  • 文档 1 包含单词“sleeved”,文档 4 包含单词“sleeves”。
  • field_masking_span 使词干字段匹配看起来像是在原始字段中。
  • 这些词条在指定顺序中彼此相距 1 个位置(“long”必须出现在“sleeve”之前)。
响应
{
  "took": 7,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 0.7444251,
    "hits": [
      {
        "_index": "clothing",
        "_id": "1",
        "_score": 0.7444251,
        "_source": {
          "description": "Long-sleeved dress shirt with a formal collar and button cuffs. "
        }
      },
      {
        "_index": "clothing",
        "_id": "4",
        "_score": 0.4291246,
        "_source": {
          "description": "A set of two midi silk shirt dresses with long fluttered sleeves in black. "
        }
      }
    ]
  }
}

参数

下表列出了 field_masking_span 查询支持的所有顶级参数。所有参数均为必填。

参数 数据类型 描述
query 对象 要在实际字段上执行的 span 查询。
field 字符串 用于掩盖查询的字段名。其他 span 查询会将此查询视为在此字段上执行。
剩余 350 字符

有问题?

想要贡献?