4

NESTでSearchBuilderAPIを使用するためのヒントや例があるかどうか疑問に思いました。ドキュメントはまだ少しまばらです。

URLパラメータで送信された基準に基づいてクエリ/フィルタを動的に構築しようとしています。例:

www.mydomain.com/things/search?prop1=3&prop2=foo&prop3=bar

そして、それらを抽出したら、存在する基準に基づいて完全一致クエリを作成します。

4

2 に答える 2

3

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

  • 両方が有効な場合、boolクエリを実行します
  • 1つだけが有効な場合は、1つの用語のクエリのみを実行します
  • どちらも有効でない場合は、match_allクエリにフォールバックします。
于 2012-12-02T21:04:43.140 に答える
0

これが私がそれをやった方法です:

  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();

これが最も効率的で効果的な方法かどうかはわかりませんが、機能します。

于 2012-10-05T15:58:19.510 に答える