Напишите DSL, используя NEST для эластичного поиска - PullRequest
0 голосов
/ 13 ноября 2018

Я новичок в ElasticSearch. Я хочу написать простой запрос агрегации с использованием NEST в asp.net. Как написать этот простой запрос

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

Я начал что-то вроде этого:

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

}

Спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

Начал писать комментарий, но, может быть, давайте ответим :))

Здесь - документы для написания агрегаций с использованием синтаксиса 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, этот должен пролить некоторый свет на то, как использовать ваш пользовательский тип для отображения класса c # в типasticsearch. Причина этого заключается в том, чтобы иметь тип, отвечающий только за «общение» сasticsearch, поэтому наличие JObject в этой роли может быть не лучшим вариантом, так как это не тип, созданный вами, и он может развиваться в будущем так, как вы это делаете. не хочу.

...