2017-03-01 27 views
1

我有这样的查询:如何访问从搜索聚合窝斗读取文件

var result = clientConnection.Search<dynamic>(s => s 
    .Index(indexname) 
    .Type(typename) 
.Aggregations(a => a 
    .DateRange(fieldvalue, d => d 
     .Field(fieldname) 

     .Ranges(
      r => r.To("2016-03-30T19:40:50+00:00"), 
      r => r.From("2016-03-15T19:40:50+00:00") 
     ) 
    ) 
) 
); 

      var agg = result.Aggs.DateRange("L2"); 

但是,这给我2个巢桶这样

nest bucket

这只给我文件数。但我需要查看文档中的值。如何检索文档中的值?我使用Nest.BucketItem,但我无法检索它。

另外我可以看到有2个桶。为什么不是1?请建议

回答

0

如果您是在实际的文档之后,那么获取文档的查询可能是您需要的,而不是聚合。您可以使用Multi Search API在一个请求中发出多个查询。与NEST 2.x以上,这看起来像

var indexname = "index-name"; 
var typename = "type-name"; 
var fieldname = "field-name"; 

var result = client.MultiSearch(ms => ms   
    .Index(indexname) 
    .Type(typename) 
    .Search<dynamic>("search1", s => s 
     .Query(q => +q 
      .DateRange(r => r 
       .Field(fieldname) 
       .LessThan("2016-03-30T19:40:50+00:00") 
      ) 
     ) 
    ) 
    .Search<dynamic>("search2", s => s 
     .Query(q => +q 
      .DateRange(r => r 
       .Field(fieldname) 
       .GreaterThan("2016-03-15T19:40:50+00:00") 
      ) 
     ) 
    ) 
); 

var search1Documents = result.GetResponse<dynamic>("search1").Documents; 
var search2Documents = result.GetResponse<dynamic>("search2").Documents; 

这将返回您匹配每个查询的前10个文档。您可以在每个搜索上使用.From().Size()对结果进行分页。

编辑:

巢1.x中,多搜索请求看起来像

var indexname = "index-name"; 
var typename = "type-name"; 
var fieldname = "field-name"; 

var result = client.MultiSearch(ms => ms 
    .FixedPath(indexname, typename) 
    .Search<dynamic>("search1", s => s 
     .Query(q => q 
      .Filtered(fq => fq 
       .Filter(fqf => fqf 
        .Range(r => r 
         .OnField(fieldname) 
         .Lower("2016-03-30T19:40:50+00:00") 
        ) 
       ) 
      ) 
     ) 
    ) 
    .Search<dynamic>("search2", s => s 
     .Query(q => q 
      .Filtered(fq => fq 
       .Filter(fqf => fqf 
        .Range(r => r 
         .OnField(fieldname) 
         .Greater("2016-03-15T19:40:50+00:00") 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

var search1Documents = result.GetResponse<dynamic>("search1").Documents; 
var search2Documents = result.GetResponse<dynamic>("search2").Documents; 

如果可以,虽然,我会建议升级到Elasticsearch的最新5.x版和NEST为all Elasticsearch 1.x versions are now end of line for support since 16th January 2017。至少,我会推荐upgrading NEST to the latest 1.x version,它应该与Elasticsearch 1.4兼容。

+0

Hi Ross,在这些行中写入查询时出现错误var result = client.MultiSearch(ms => ms .Index(indexname) .Type(typename)........ It显示Nest.MultisearchDescription不包含Index的定义 – Nilanjana

+0

您使用的是哪个nuget包版本的NEST? –

+0

Hi ross,我可以使用嵌套版本1.4 – Nilanjana