スパンフィールドマスキングクエリ
スパンクエリがコンポジット単一フィールドスパンクエリに参加できるようにするためのラッパーで、検索フィールドについて嘘をつくことができます。
これにより、通常は許可されていない異なるフィールドにわたるspan-near
やspan-or
のようなクエリをサポートできます。
スパンフィールドマスキングクエリは、同じコンテンツが複数のアナライザーでインデックスされる場合に、マルチフィールドと組み合わせて非常に貴重です。たとえば、テキストを単語に分割する標準アナライザーでフィールドをインデックスし、さらに単語をそのルート形式にステムする英語アナライザーで再度インデックスすることができます。
例:
Python
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)
Ruby
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
Js
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
に設定する必要があります。