web-dev-qa-db-ja.com

ElasticSearchNEST複数のタイプとすべてのフィールドを検索

ElasticSearch NESTを使用すると、クエリから期待される結果を取り戻すのに問題があります。私のインデックス/タイプのレイアウトは次のとおりです。

  • 劇場(インデックス)
    • イベント(種類)
    • 劇場
    • プロモーション
    • 一般的なコンテンツ

これらのタイプにはそれぞれ独自のフィールドがあり、NESTのIndex()メソッドを使用してデータにインデックスを付けています。次の方法で、適切にインデックスが作成されていることを確認できます。

  • 見つめている http://localhost:9200/theatres/_mapping
  • Head プラグインを使用してデータを表示する

参考までに、これが私のクライアント構成です。

// TODO: Put settings in config
var node = new Uri("http://localhost:9200");
var connSettings = new ConnectionSettings(node);
connSettings.SetDefaultIndex("theatres");
connSettings.ThrowOnElasticsearchServerExceptions();

var client = new ElasticClient(connSettings);

クエリ

ここで、クエリについて、インデックス内のallタイプとallフィールドを検索します。 Headプラグインを使用して、クエリを生成し、期待される結果を得ることができます。 enter image description here

生成されたクエリを使用して、次のNESTクエリを試しました。

var query = "waukesha"; // This would be passed in

var resp = client.Search<dynamic>(s => s
   .From(0)
   .Take(10)
   .Query(qry => qry
       .Bool(b => b
       .Must(m => m
           .QueryString(qs => qs
               .DefaultField("_all")
               .Query(query))))));

ただし、これでは別の結果が得られます。 NESTは私が知らない舞台裏で何かをしているのですか?または、これはサポートされていませんか?

14
Matt Millican

クエリに.AllTypes()がありません

.Types("type1", "type1")を使用して複数のタイプを指定することもできます

そう:

var query = "waukesha"; // This would be passed in

var resp = client.Search<dynamic>(s => s
   .AllTypes()
   .From(0)
   .Take(10)
   .Query(qry => qry
       .Bool(b => b
       .Must(m => m
           .QueryString(qs => qs
               .DefaultField("_all")
               .Query(query))))));