1

私は Elastic Search と、C# で使用している Elastic Search API: PlainElastic.Netにかなり慣れていません。

簡単なリクエストがありますが、それで行き詰まっています。クエリビルダーに複数の (ハードコードされていない) ファセットを追加するにはどうすればよいですか?

//code has been simplified 

//list of fields I want to be added in my facet part of the querybuilder
List<string> FacetFields = new List<string>{"field1", "field2", "fieldN"};

//qb is already instantiated with a simple ES query 
//I want now to add facets definition

qb.Facets(_facets =>
    FacetFields.ForEach(_ff => 
        _facets.Terms(t => t
           .FacetName("FacetsFor" + _ff)
           .Field(_ff)
        );
    });
);

これはコンパイルされません。エラーは次のとおりです。

ラムダ式をデリゲート型 ' System.Func<PlainElastic.Net.Queries.Facets<MyType>,PlainElastic.Net.Queries.Facets<MyType>>' に変換できません。ブロックの一部の戻り値の型は戻り値の型デリゲートに暗黙的に変換できないためです

4

2 に答える 2

0

私は C# の専門家ではありませんが、私の Ruby コードと比較すると、裏返しになっていると思います。

目的は、最終的な JSON を次のようにすることです。

"facets" : {
  "facet_name1" : { "terms" : {"field" : "tags"} }
  "facet_name2" : { "terms" : {"field" : "user"} }
}

コードを見ると、用語が各句の外側にあり、その中にファセット名があるように見えます。それがコードが実際に行っていることである場合、それは正しくありません。

ライブラリによって生成された JSON またはクエリの後に elasticsearch からの出力を表示する方法があれば、ES が受信したクエリがどのように見えるかを確実に確認できます。これは、自分のクエリをデバッグする際に不可欠です。

名前付きの各フェース内に追加のフィルタリングを追加することもできますが、最初に単純なケースを機能させ、1 つのファセット、次に 2 つ、そしてより複雑なフィルタリングを行います。

于 2013-04-12T13:48:23.850 に答える