Отображение значений результатов эластичного поиска с помощью NEST

Я использую следующий код для поиска полей articleid и control. он будет содержать значения 2 полей. Но я не могу получить доступ к значениям этих двух полей. ЗДЕСЬ поиск‹> является динамическим.

  var searchrange = _client.Search<dynamic>(s =>  s
               .Indices("kb_v2").Types("kb")
               .From(0).Size(10)
               .Fields("articleid","control")
               .Query(q => q
                     .Range(r =>r
                         .OnField("articleid")
                         .Greater("2")
                         .Lower("5"))));

Можете ли вы объяснить, как получить значения этих двух полей.


person BasK    schedule 29.10.2014    source источник


Ответы (2)


Поскольку поля Elasticsearch 1.0 всегда возвращаются как Dictionary<string, object[]> при обращениях, чтобы получить к ним доступ в NEST, вы можете использовать:

foreach (var doc in queryResults.FieldSelections)
{
    var articleIds = doc.FieldValues<int[]>("articleid");
}

Подробнее о синтаксисе см. в этом PR.

person Martijn Laarman    schedule 04.11.2014
comment
Это работает. у меня есть еще одно сомнение. если я использую QueryResult.Hits означает, что мы получим ключи и значения.. как получить доступ к ключам и соответствующим значениям ключей?? - person BasK; 04.11.2014
comment
Затем с помощью метода doc.FieldValues‹›() поля всегда возвращаются в виде массива, за исключением внутренних значений метаданных (например, _id будет возвращено как одно значение). - person Darius Kucinskas; 23.04.2015

Ответ поиска (тип ISearchResponse) имеет свойство FieldSelections, которое содержит результаты и сведения. В старой версии Nest приходилось перебирать свойство Hits, чтобы найти значение каждого поля.

"hits": [
         {
            "_index": "kb_v2",
            "_type": "kb",
            "_id": "3565178",
            "_score": 1,
            "fields": {
               "articleid": [
                  "3"
               ]
            }
         },
         {
            "_index": "kb_v2",
            "_type": "kb",
            "_id": "3932480",
            "_score": 1,
            "fields": {
               "articleid": [
                  "4"
               ]
            }
         }]

Дополнительные сведения об использовании FieldSelections в клиенте ElasticSearch.net см. в этом модульном тесте здесь

person gsk    schedule 03.11.2014
comment
эта опция содержит значения индекса, типа, идентификатора, оценки и полей. Я прошу только значения имени и Джона. - person BasK; 04.11.2014
comment
Индекс, тип, метаданные идентификатора будут частью любого ответа от elasticsearch, вам необходимо использовать свойство FieldSelections, которое имеет ключ как articleid и объект ответа ожидаемого значения в Nest API. - person gsk; 04.11.2014
comment
Я использую этот код для получения идентификатора статьи и контрольного значения, используя цикл foreach (var m in searchrange.Hits) {var titl=m.Fields.FieldValuesDictionary.TryGetValue(articleid,out dynamic);} Но я не смог получить стоимость статьи.. - person BasK; 04.11.2014
comment
Какую версию Nest и elasticsearch вы используете? - person gsk; 04.11.2014
comment
эластичный поиск 1.2.1 и Nest v4.0.30319 - person BasK; 04.11.2014