跨度字段掩码查询

编辑

通过谎称其搜索字段,允许跨度查询参与复合单字段跨度查询的包装器。

这可用于支持跨不同字段的 span-nearspan-or 等查询,而这通常是不允许的。

当使用多个分析器索引相同内容时,跨度字段掩码查询与多字段结合使用非常宝贵。例如,我们可以使用将文本分解为单词的标准分析器索引一个字段,然后再次使用将单词词干化为其词根形式的英语分析器索引该字段。

示例

resp = client.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": {
            "*": {}
        }
    },
)
print(resp)
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
const response = await client.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: {
      "*": {},
    },
  },
});
console.log(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