使用NEST显示弹性搜索命中值

时间:2014-10-29 07:25:54

标签: c# elasticsearch nest

我使用以下代码搜索articleid和控制字段。它将保存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"))));

你能解释一下如何获得这两个字段值..

2 个答案:

答案 0 :(得分:1)

由于Elasticsearch 1.0字段总是在点击时返回Dictionary<string, object[]>以便在NEST中访问这些字段,因此您可以使用:

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

有关语法的详细信息,请参阅this PR

答案 1 :(得分:0)

搜索响应(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"
               ]
            }
         }]

有关如何在ElastichSearch.net客户端中使用FieldSelections的更多信息,请参阅此单元测试here