5

次のような基本的な Elasticsearch クエリがあります。

POST /fruit/_search
{"query":{"term":{"Name":"banana"}}}

私は結果を返します。感覚的に実行しても問題ありません。

だから私はelasticsearch.netでこれをやろうとしています

var requestBody = new { query = new { term = new { Name = "banana" } } };
                var result = client.Search<string>("fruit", requestBody);

そして、結果が返されません。新しい {} を含む検索本文がある場合、ヒットは取得されますが、フィルタリングされません。

私は何を間違っていますか?

4

1 に答える 1

8

低レベルのクライアント (elasticsearch.net) を直接使用すると、正規化は行われず、オブジェクトが逐語的にシリアル化されます。

var query = new { query = new { term = new { Name = "banana" } } };
var json = new ElasticsearchClient().Serializer.Serialize(query).Utf8String();

これにより、次のjsonが生成されます。

{
  "query": {
    "term": {
      "Name": "banana"
    }
  }
}

NEST を使用する場合、デフォルトの動作はキャメルケースのプロパティ名です (NEST は独自のものです)。

{
  "query": {
    "term": {
      "name": "banana"
    }
  }
}

高レベル クライアントを介して低レベル クライアントを使用する場合 ( client.Raw)、高レベル クライアントとまったく同じシリアル化設定が使用されます。

次の方法で、高レベルのクライアントでこの動作を制御できます。

var connectionSettings = new ConnectionSettings()
    .SetDefaultPropertyNameInferrer(p=>p);
var client = new ElasticClient(connectionSettings);
于 2014-10-19T11:33:53.043 に答える