如果您是在实际的文档之后,那么获取文档的查询可能是您需要的,而不是聚合。您可以使用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兼容。
Hi Ross,在这些行中写入查询时出现错误var result = client.MultiSearch(ms => ms .Index(indexname) .Type(typename)........ It显示Nest.MultisearchDescription不包含Index的定义 – Nilanjana
您使用的是哪个nuget包版本的NEST? –
Hi ross,我可以使用嵌套版本1.4 – Nilanjana