node.js sdkを使用して、すべてのフィールドでテキストを検索し、その結果をサブセットにフィルタリングし、次にカスタムインデックスに基づいて集計するelasticsearchクエリを実行しています。フィルタと集計を使用したElastic Searchクエリは集計を返しません
私は、クエリの構文が正しいことを確認するためにフィルタと集計を含むesドキュメントといくつかのスタックオーバーフローに関する質問を見てきましたが、クエリの実行時に構文エラーは表示されません。私のクエリは私のデータセット内の2000以上のドキュメントをヒットしますが、レスポンスオブジェクトには集計は含まれていません。
var search_text = "Chase Bank";
var doctype_selections = ["mortgage"];
es.search({
index: index_list,
type: 'page',
body: {
query: {
filtered: {
query: {
match: {
_all: {
"query": search_text,
"operator": "and"
}
},
filter: {
terms: {
document_type: doctype_selections
}
}
}
}
},
aggs: {
"top_tag_hits":{
terms: {
field: "agg_index",
size: agg_size
},
aggs: {
"hits":{
top_hits: {
size: agg_size
}
}
}
}
},
},
explain: true,
size: result_size,
}).then(function (resp) {
var hits = resp.hits.hits;
var aggs = resp.aggregations;
console.log(resp);
response.send(aggs);
}, function (err) {
console.trace(err.message);
response.send(err.message);
});
私が正しく動作しているとわかったことは、query->filter query->aggregation on filtered query
です。フィルタと集約を削除すると、クエリ自体が意図した通りに機能します。フィルタを削除しても集計とクエリを保持すると、それは機能し、集計を返します。集計を削除してフィルタを保持すると、意図したとおりに機能します。
クエリの集約部分全体が単に無視されているようです。問題は何ですか?
をしかし、それは集約前にフィルタリングすることは可能でしょうか? – GrantD71
はい各集計は独自のフィルタを持つことができます –