跨度字段掩码查询
编辑跨度字段掩码查询
编辑通过谎称其搜索字段,允许跨度查询参与复合单字段跨度查询的包装器。
这可用于支持跨不同字段的 span-near
或 span-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": { "*": {} } } }
注意:span_field_masking
查询可能具有意外的评分和高亮行为。这是因为查询返回并突出显示了掩码字段,但评分和高亮是使用原始字段的术语统计信息和偏移量完成的。
注意:为了使高亮显示起作用,高亮显示器上的参数:require_field_match
应设置为 false
。