如何建立Nest SearchRequest对象并在查询中查看原始JSON?

时间:2019-02-28 22:49:40

标签: c# elasticsearch nest

我正在将Nest 6.2与ES 6.6一起使用

我有以下运行良好的代码:

        var response = elasticClient.Search<PropertyRecord>(s => s
            .Query(q => q.Terms(
                c => c
                    .Field(f => f.property_id_orig)
                    .Terms(listOfPropertyIds) // a list of 20 ids say... 
            ))
            .From(0)
            .Take(100) // just pull up to a 100... 
        );


        if (!response.IsValid)
            throw new Exception(response.ServerError.Error.Reason);

        return response.Documents;

但是我知道基础查询存在问题,因为返回了索引中的所有文档。因此,我希望能够看到由lambda表达式生成的原始Json,以便可以看到在Head插件或Fiddler等中运行的结果。

如果我使用SearchRequest对象并将其传递给Search方法,那么我能够看到Query Json吗?

        var request = new SearchRequest
        {
            // and build equivalent query here
        };

我在使用SearchRequest方法构建相应查询时遇到了麻烦,无法找到说明如何执行此操作的示例。

有人知道吗?

1 个答案:

答案 0 :(得分:1)

您可以使用SerializeToString extension method

任何 NEST请求获取JSON。
var client = new ElasticClient();

var listOfPropertyIds = new [] { 1, 2, 3 };

// pull the descriptor out of the client API call
var searchDescriptor = new SearchDescriptor<PropertyRecord>()
    .Query(q => q.Terms(
        c => c
            .Field(f => f.property_id_orig)
            .Terms(listOfPropertyIds) // a list of 20 ids say... 
    ))
    .From(0)
    .Take(100);

var json = client.RequestResponseSerializer.SerializeToString(searchDescriptor, SerializationFormatting.Indented);

Console.WriteLine(json);

产生

{
  "from": 0,
  "query": {
    "terms": {
      "property_id_orig": [
        1,
        2,
        3
      ]
    }
  },
  "size": 100
}