[解決済み] Elasticsearchでクエリをフィルタリングする適切な方法とは?(フィルタ vs フィルタリングされたクエリ)
質問
Elasticsearchのquot;filtersとquot;filtered queriesの間に違いがあるかどうかを調べています。
以下の2つのリクエスト例は、私のインデックスに対して実行された場合、同じ結果を返します。
何か微妙な違いがあるのでしょうか?
状況に応じて、どちらかを優先する理由はありますか?
DSLは、1つのトップレベル
query
,
と
1つのトップレベル
filter
:
GET /index/type/_search?_source
{
"query": {
"multi_match": {
"query": "my dog has fleas",
"fields": ["name", "keywords"]
}
},
"filter": {
"term": {"status": 2}
}
}
DSLの提供
のみ
トップレベルの
query
を使用しています。
filtered
を構成する。
GET /index/type/_search?_source
{
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "my dog has fleas",
"fields": ["name", "keywords"]
}
},
"filter": {
"term": {"status": 2}
}
}
}
}
解決方法は?
最初の例は post_filter これはパフォーマンスの観点からは最適とは言えません。フィルタはクエリの前に実行されるので、フィルタリングされたクエリの方が望ましいです。一般に、ドキュメントのスコアリングは単なるブール値での合格/不合格よりもコストがかかるので、フィルタを先に実行させたいものです。そうすれば、クエリを実行する前に結果セットを切り捨てることができます。post_filter では、まずクエリが実行され、結果セット全体がスコアリングされ、その結果に対してフィルタが適用されます。
トップレベルの
filter
ディレクティブは 1.0 で非推奨となり、次のように名前が変更されました。
post_filter
を使用して、その目的と使用方法を明確にしました。
検索におけるトップレベルのフィルタパラメータは post_filter に改名され、検索結果をフィルタリングする主要な方法(代わりにフィルタリングされたクエリを使用)としてではなく、ファセット/アグリゲーションが計算された後に結果をフィルタリングするためだけに使用することを示すようになりました。
http://www.elastic.co/guide/en/elasticsearch/reference/current/_search_requests.html
関連
-
[解決済み] Elasticsearchです。ローカルホストのポート9200への接続に失敗 - 接続拒否
-
[解決済み] Elasticsearchのクエリ文字列のクエリにnot equal to?
-
[解決済み] Elasticsearchは、複数のドキュメントを含むトランザクションをサポートする方法
-
[解決済み] Elasticsearchクエリ - @timestampと別のフィールドで並べ替え?
-
[解決済み] elasticsearchで個数ではなく、明確な値を検索する。
-
[解決済み] elasticsearchで本当にデータを再インデックス化する方法
-
[解決済み] LogstashでElasticsearchの出力テンプレートを設定する方法
-
[解決済み] 全レコードを返すElasticsearchクエリ
-
Elasticsearch 5.Xで集計する際、テキストフィールドのFielddataはデフォルトで無効化されます。
-
[解決済み】クエリとフィルタの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] クラスタのインデックスの名前を変更する方法は?
-
[解決済み] Elasticsearch : ルートマッピングの定義にサポートされていないパラメータがある index : not_analyzed
-
[解決済み] Elasticsearchクエリ - @timestampと別のフィールドで並べ替え?
-
[解決済み] ElasticSearchのキーワードフィールドの「Fielddata is disabled on text fields by default」を修正する方法
-
[解決済み] エラスティック検索クエリの完全一致
-
[解決済み] Elasticsearchでクエリをフィルタリングする適切な方法とは?(フィルタ vs フィルタリングされたクエリ)
-
[解決済み] elasticsearchで本当にデータを再インデックス化する方法
-
[解決済み] LogstashでElasticsearchの出力テンプレートを設定する方法
-
[解決済み】elasticsearchのboolクエリはORで結合する必要があります。
-
[解決済み】Elasticsearchの集計結果/バケットを10個だけでなく全て表示する。