1
このElasticSearchクエリを使用して、インデックスデータの集計数を調べました。名前付きフィルタを使用したElasticSearch集約クエリをNESTに変換するC#
SEARCHTERM:リンゴ、オレンジ、バナナ
{
"size": 0,
"_source": {
"excludes": [
"chapterData"
]
},
"aggs": {
"asPerBookID": {
"terms": {
"field": "bookID",
"size": 100000
},
"aggs": {
"asPerChapterIndex": {
"terms": {
"field": "chapterIndex",
"min_doc_count": 1,
"size": 10000
},
"aggs": {
"asPerChapterData": {
"nested": {
"path": "chapterData"
},
"aggs": {
"asPerChapterDatadotData": {
"filters": {
"filters": {
"apple": {
"query_string": {
"query": "apple",
"default_field": "chapterData.data"
}
},
"orange": {
"query_string": {
"query": "orange",
"default_field": "chapterData.data"
}
},
"banana": {
"query_string": {
"query": "banana",
"default_field": "chapterData.data"
}
}
}
}
}
}
}
}
}
}
}
},
"query": {
"bool": {
"must": [
{
"nested": {
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "apple",
"default_field": "chapterData.data"
}
},
{
"query_string": {
"query": "orange",
"default_field": "chapterData.data"
}
},
{
"query_string": {
"query": "banana",
"default_field": "chapterData.data"
}
}
],
"minimum_number_should_match": 1
}
},
"path": "chapterData",
"inner_hits": {
"size": 10000
}
}
}
]
}
}
}
このクエリは、検索用語 'リンゴオレンジバナナ' のために作成されています。したがって、3つの名前付きフィルタがあります。しかし、ユーザーが「リンゴオレンジバナナブドウ」を検索した場合は、名前付きフィルタが必要です。 NESTを使用して挿入します。
以下は、SearchTermの名前付きフィルタを作成するために実装したコードです。
string[] words = pSearchTerm.Split(' ');
NamedFiltersContainer myFilters = new NamedFiltersContainer();
foreach (var str in words)
{
myFilters.Add(str, new QueryStringQuery() { Query = str, DefaultField = "chapterData.data", DefaultOperator = lOperator, Analyzer = "whitespace" });
}
さて、問題は、私はElasticSearchでクエリを実行するために流暢DSLを使用していると私はそれでmyFilters
を追加する方法がわからないです。誰も助けることができますか?
私にとって、どんな種類の助けになるでしょうか?
ありがとうございます。ここでは、words
変数が必要な名前や用語が含まれていることを、仮定し
のためのローミングサービスは行いませんので、私はまた、ルート
must
条件を削除しましたですあなたの答えから新しいことを学びました!多くの助け!ありがとう@ランダム – Callisto