使用NEST编写DSL进行Elasticsearch

时间:2018-11-13 17:01:48

标签: c# elasticsearch nest

我是ElasticSearch的新手。我想在asp.net中使用NEST编写一个简单的聚合查询。如何编写这个简单的查询

GET /_search
{
    "aggs" : {
        "genres" : {
            "terms" : { "field" : "genre" }
        }
    }
}

我开始了这样的事情:

var response = _connection.Get<ElasticClient>().Search<JObject>(s =>
{

}

谢谢

1 个答案:

答案 0 :(得分:0)

开始写评论,但也许我们可以将其作为答案:)

Here是用于使用NEST语法编写聚合的文档。

如示例所示,对于此示例聚合:

{
  "aggs": {
    "name_of_child_agg": {
      "children": {
        "type": "commits"
      },
      "aggs": {
        "average_per_child": {
          "avg": {
            "field": "confidenceFactor"
          }
        },
        "max_per_child": {
          "max": {
            "field": "confidenceFactor"
          }
        },
        "min_per_child": {
          "min": {
            "field": "confidenceFactor"
          }
        }
      }
    }
  }
}

您可以编写以下NEST流利代码:

s => s
.Aggregations(aggs => aggs
    .Children<CommitActivity>("name_of_child_agg", child => child
        .Aggregations(childAggs => childAggs
            .Average("average_per_child", avg => avg.Field(p => p.ConfidenceFactor))
            .Max("max_per_child", avg => avg.Field(p => p.ConfidenceFactor))
            .Min("min_per_child", avg => avg.Field(p => p.ConfidenceFactor))
        )
    )
)

此外,我不认为您想将JObject类型用作POCO,this应该阐明如何使用自定义类型将c#类映射为elasticsearch类型。背后的原因:让类型仅负责与Elasticsearch进行“通信”,所以让JObject担任此角色可能不是最佳选择,因为它不是您创建的类型,并且将来可能会以这种方式发展你不要。