跨域字段掩码查询编辑

包装器,允许跨域查询通过虚构其搜索字段来参与复合单字段跨域查询。

这可以用来支持跨不同字段的查询,例如 span-nearspan-or,这在通常情况下是不允许的。

跨域字段掩码查询与 多字段 结合使用时非常宝贵,当相同内容使用多个分析器进行索引时。例如,我们可以使用标准分析器对字段进行索引,该分析器将文本分解为单词,并再次使用英语分析器对单词进行词干提取。

示例

response = client.search(
  body: {
    query: {
      span_near: {
        clauses: [
          {
            span_term: {
              text: 'quick brown'
            }
          },
          {
            span_field_masking: {
              query: {
                span_term: {
                  'text.stems' => 'fox'
                }
              },
              field: 'text'
            }
          }
        ],
        slop: 5,
        in_order: false
      }
    },
    highlight: {
      require_field_match: false,
      fields: {
        "*": {}
      }
    }
  }
)
puts response
GET /_search
{
  "query": {
    "span_near": {
      "clauses": [
        {
          "span_term": {
            "text": "quick brown"
          }
        },
        {
          "span_field_masking": {
            "query": {
              "span_term": {
                "text.stems": "fox" 
              }
            },
            "field": "text" 
          }
        }
      ],
      "slop": 5,
      "in_order": false
    }
  },
  "highlight": {
    "require_field_match" : false, 
    "fields": {
      "*": {}
    }
  }
}

我们进行搜索的原始字段

掩码字段,我们用原始字段对其进行掩码

使用 "require_field_match" : false 来突出显示掩码字段

注意:span_field_masking 查询可能具有意外的评分和突出显示行为。这是因为查询返回并突出显示掩码字段,但评分和突出显示是使用原始字段的词语统计信息和偏移量完成的。

注意:为了使突出显示工作,参数:require_field_match 应该在突出显示器上设置为 false