我刚接触elastic search,想知道是否可以使用普通术语、范围查询和排序来完成以下操作,或者是否需要使用elastic search聚合查询
我有一组文档,其中有几个字符串字段和一个日期字段。我想选择那些完全匹配(术语查询)两个字符串字段并且日期在某个日期范围内的文档的前N个文档,并获得前N个文档的计数
一个典型的文档是
{ "_id" : ObjectId("55b0a8b448f3bdb6bf26683c"),
"type" : "type1",
"time-gmt" : ISODate("2015-07-23T08:41:29.299Z"),
"sID" : "id1"}我想找出,比如说,在某个“时间-格林尼治标准时间”范围内,type=“类型1”的前10个文档,以及这10个前10个文档中有多少个。因此,结果集表将
sID1 120
sID2 100
sID3 90
...
sID10 3发布于 2015-10-10 07:11:44
如果我正确理解了您的问题,那么您正在寻找的部分内容(特定type的文档计数)应该可以使用存储桶聚合来实现。
存储桶聚合允许您将文档分组到一个或多个存储桶中。更多信息请看这里:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html
还有这里:
在您的特定情况下,我认为您可以通过构造类似于以下查询的查询来查询Elasticsearch集群:
curl -XPOST 'http://<your-elasticsearch-cluster-endpoint>/_all/_search?pretty' -d '{
"size": 0,
"aggregations": {
"type_agg": {
"filter": {
"time-gmt": {
"from":<tick>,
"to":<tick>
}
},
"terms": {
"field": "type"
}
}
}
}'我相信这个查询将根据在type字段中找到的值来计算文档的数量。
希望这对你有足够的帮助。
https://stackoverflow.com/questions/33042193
复制相似问题