NESTでSearchBuilderAPIを使用するためのヒントや例があるかどうか疑問に思いました。ドキュメントはまだ少しまばらです。
URLパラメータで送信された基準に基づいてクエリ/フィルタを動的に構築しようとしています。例:
www.mydomain.com/things/search?prop1=3&prop2=foo&prop3=bar
そして、それらを抽出したら、存在する基準に基づいて完全一致クエリを作成します。
NESTでSearchBuilderAPIを使用するためのヒントや例があるかどうか疑問に思いました。ドキュメントはまだ少しまばらです。
URLパラメータで送信された基準に基づいてクエリ/フィルタを動的に構築しようとしています。例:
www.mydomain.com/things/search?prop1=3&prop2=foo&prop3=bar
そして、それらを抽出したら、存在する基準に基づいて完全一致クエリを作成します。
DSLクエリ構文を使用すると、次のように簡単に実行できます。
var results = client.Search(s=>s
.Fields(new string[0])
.Query(q=>
q.Term(ESFields.City, city)
&& q.Term(ESFields.State, state)
)
);
conditionless query
これは、0.9.10.0で追加されたサポートに依存しています。
これは、値を保持している場合にのみ都市クエリをレンダリングし、nullまたは空でないcity
場合にのみ州用語クエリをレンダリングします。state
これが私がそれをやった方法です:
var boolQuery = QueryFactory.BoolQuery();
if (!String.IsNullOrEmpty(city)) { boolQuery.Must(QueryFactory.TermQuery(ESFields.City, city)); }
if (!String.IsNullOrEmpty(state)) { boolQuery.Must(QueryFactory.TermQuery(ESFields.State, state)); }
//etc. for many fields
var sb = SearchBuilder.Builder();
//I want no actual data - this will ensure I only get IDs
sb.Fields(new string[0]);
sb.Query(boolQuery);
var companyIds = ((ElasticClient)_elasticClient).Search(sb, ESIndexes.Client, ESIndexTypes.Client, tenantId)
.DocumentsWithMetaData.Select(d => d.Id).ToList();
これが最も効率的で効果的な方法かどうかはわかりませんが、機能します。