Combined fields
combined_fields
クエリは、複数のテキストフィールドを、内容が1つの結合フィールドにインデックスされたかのように検索することをサポートします。このクエリは、入力文字列の用語中心のビューを取ります。最初にクエリ文字列を個々の用語に分析し、その後、任意のフィールド内で各用語を探します。このクエリは、title
、abstract
、および body
のように、マッチが複数のテキストフィールドにまたがる可能性がある場合に特に便利です。
Python
resp = client.search(
query={
"combined_fields": {
"query": "database systems",
"fields": [
"title",
"abstract",
"body"
],
"operator": "and"
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
combined_fields: {
query: 'database systems',
fields: [
'title',
'abstract',
'body'
],
operator: 'and'
}
}
}
)
puts response
Js
const response = await client.search({
query: {
combined_fields: {
query: "database systems",
fields: ["title", "abstract", "body"],
operator: "and",
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"combined_fields" : {
"query": "database systems",
"fields": [ "title", "abstract", "body"],
"operator": "and"
}
}
}
The combined_fields
クエリは、The Probabilistic Relevance Framework: BM25 and Beyond で説明されているシンプルな BM25F フォーミュラに基づいてスコアリングに対する原則的なアプローチを取ります。マッチのスコアリングを行う際、クエリはフィールド間で用語とコレクションの統計を組み合わせて、指定されたフィールドが1つの結合フィールドにインデックスされたかのように各マッチのスコアを計算します。このスコアリングは最善の試みであり、combined_fields
はいくつかの近似を行い、スコアは BM25F モデルに完全には従いません。
Field number limit
デフォルトでは、クエリが含むことができる句の数に制限があります。この制限は、indices.query.bool.max_clause_count
設定によって定義されており、デフォルトは 4096
です。結合フィールドクエリの場合、句の数はフィールドの数と用語の数を掛けたものとして計算されます。
Per-field boosting
フィールドブーストは、結合フィールドモデルに従って解釈されます。たとえば、title
フィールドにブーストが2の場合、スコアはタイトル内の各用語が合成された結合フィールドに2回出現するかのように計算されます。
Python
resp = client.search(
query={
"combined_fields": {
"query": "distributed consensus",
"fields": [
"title^2",
"body"
]
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
combined_fields: {
query: 'distributed consensus',
fields: [
'title^2',
'body'
]
}
}
}
)
puts response
Js
const response = await client.search({
query: {
combined_fields: {
query: "distributed consensus",
fields: ["title^2", "body"],
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"combined_fields" : {
"query" : "distributed consensus",
"fields" : [ "title^2", "body" ]
}
}
}
個々のフィールドは、キャレット (^ ) 表記を使用してブーストできます。 |
combined_fields
クエリは、フィールドブーストが1.0以上であることを要求します。フィールドブーストは小数であることが許可されています。
Top-level parameters for combined_fields
fields
- (必須、文字列の配列) 検索するフィールドのリスト。フィールドのワイルドカードパターンが許可されています。サポートされているのは、
text
フィールドのみで、すべて同じ検索analyzer
を持っている必要があります。 query
- (必須、文字列) 提供された
<fields>
で検索するテキスト。combined_fields
クエリは、検索を実行する前に提供されたテキストを analyzes します。 auto_generate_synonyms_phrase_query
- (オプション、Boolean)
true
の場合、match phrase クエリが自動的に作成されます。デフォルトはtrue
です。
Use synonyms with match query の例を参照してください。 operator
- (オプション、文字列)
query
値内のテキストを解釈するために使用されるブール論理。有効な値は次のとおりです:or
(デフォルト)- たとえば、
query
値がdatabase systems
の場合、database OR systems
として解釈されます。 and
- たとえば、
query
値がdatabase systems
の場合、database AND systems
として解釈されます。
minimum_should_match
- (オプション、文字列) ドキュメントが返されるために一致する必要がある最小句の数。
minimum_should_match
パラメータ の有効な値と詳細情報を参照してください。 zero_terms_query
- (オプション、文字列)
analyzer
がすべてのトークンを削除する場合、ドキュメントが返されないかどうかを示します。たとえば、stop
フィルターを使用する場合。 有効な値は次のとおりです:none
(デフォルト)analyzer
がすべてのトークンを削除する場合、ドキュメントは返されません。all
- すべてのドキュメントが返されます。これは、
match_all
クエリに似ています。
Zero terms query の例を参照してください。
Comparison to multi_match query
combined_fields
クエリは、複数の text
フィールドにわたるマッチングとスコアリングの原則的な方法を提供します。これをサポートするために、すべてのフィールドが同じ検索 analyzer
を持っている必要があります。
異なるタイプのフィールド(キーワードや数値など)を処理する単一のクエリが必要な場合は、multi_match
クエリの方が適しているかもしれません。これは、テキストフィールドと非テキストフィールドの両方をサポートし、同じアナライザーを共有しないテキストフィールドも受け入れます。
主な multi_match
モード best_fields
と most_fields
は、クエリのフィールド中心のビューを取ります。それに対して、combined_fields
は用語中心です: operator
と minimum_should_match
は、フィールドごとではなく、用語ごとに適用されます。具体的には、次のようなクエリが
Python
resp = client.search(
query={
"combined_fields": {
"query": "database systems",
"fields": [
"title",
"abstract"
],
"operator": "and"
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
combined_fields: {
query: 'database systems',
fields: [
'title',
'abstract'
],
operator: 'and'
}
}
}
)
puts response
Js
const response = await client.search({
query: {
combined_fields: {
query: "database systems",
fields: ["title", "abstract"],
operator: "and",
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"combined_fields" : {
"query": "database systems",
"fields": [ "title", "abstract"],
"operator": "and"
}
}
}
は次のように実行されます:
Txt
+(combined("database", fields:["title" "abstract"]))
+(combined("systems", fields:["title", "abstract"]))
言い換えれば、各用語はドキュメントが一致するために少なくとも1つのフィールドに存在する必要があります。
cross_fields
multi_match
モードも用語中心のアプローチを取り、operator
と minimum_should_match per-term
を適用します。combined_fields
の主な利点は、BM25F アルゴリズムに基づくスコアリングに対する堅牢で解釈可能なアプローチです。
Custom similarities
combined_fields
クエリは現在、BM25 類似性のみをサポートしており、カスタム類似性 が構成されていない限り、デフォルトとなります。フィールドごとの類似性 も許可されていません。これらのいずれかのケースで combined_fields
を使用すると、エラーが発生します。