我正在使用Elasticsearch bucket聚合。我有一组文档,每个文档都有一个类别字段,它是一个数组。我需要获得每个类别的数量以及搜索结果。但目前,我得到了错误的doc\u计数。
这是我的聚合查询
{
"aggs" : {
"category" : {
"terms" : {
"field" : "category.keyword"
}
}
}
}
下面是我得到的错误doc\u计数的结果。
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 112,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "pages",
"_type": "_doc",
"_id": "ljrbn3ABGDJu_xG-W2Mm",
"_score": 1.0,
"_source": {
"title": "testing code.",
"location_en": "Europe",
"location_fr": "Europe-Fr",
"start_date": "2020-03-03 10:05:17",
"end_date": "2020-03-13 10:05:17",
"category": [
"job",
"university",
"europe",
"researcher",
"law"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "lzrbn3ABGDJu_xG-W2PX",
"_score": 1.0,
"_source": {
"title": "Test",
"slug": "Test",
"location_en": "Asia",
"location_fr": "Asia-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"uppsala-university",
"asia",
"PhD",
"history"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "mDrbn3ABGDJu_xG-W2Pl",
"_score": 1.0,
"_source": {
"title": "Test",
"slug": "Test",
"location_en": "Europe",
"location_fr": "Europe-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"university",
"europe",
"researcher",
"law"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "mTrbn3ABGDJu_xG-XGOO",
"_score": 1.0,
"_source": {
"title": "Test",
"slug": "Test",
"location_en": "Asia",
"location_fr": "Asia-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"university",
"asia",
"PhD",
"history"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "mjrbn3ABGDJu_xG-XGOb",
"_score": 1.0,
"_source": {
"title": "testing world",
"location_en": "Europe",
"location_fr": "Europe-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"university",
"europe",
"researcher",
"law"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "mzrbn3ABGDJu_xG-XWNG",
"_score": 1.0,
"_source": {
"title": "hello",
"slug": "Helloo",
"short_description_en": "Helloo",
"location_en": "Asia",
"location_fr": "Asia-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"university",
"asia",
"PhD",
"history"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "nDrbn3ABGDJu_xG-XWNU",
"_score": 1.0,
"_source": {
"title": "Hello",
"slug": "helloo",
"short_description_en": "hello worldf",
"location_en": "Europe",
"location_fr": "Europe-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"university",
"europe",
"researcher",
"law"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "nTrbn3ABGDJu_xG-XmMF",
"_score": 1.0,
"_source": {
"title": "Test",
"slug": "test",
"short_description_en": "Test",
"location_en": "Asia",
"location_fr": "Asia-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"university",
"asia",
"PhD",
"history"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "njrbn3ABGDJu_xG-XmMS",
"_score": 1.0,
"_source": {
"title": "Test",
"slug": "test",
"short_description_en": "Test",
"location_en": "Europe",
"location_fr": "Europe-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"university",
"europe",
"researcher",
"law"
]
}
},
{
"_index": "pages",
"_type": "_doc",
"_id": "nzrbn3ABGDJu_xG-XmPZ",
"_score": 1.0,
"_source": {
"title": "Researcher position in accelerator mass spectrometry (AMS)",
"slug": "researcher-position-in-accelerator-mass-spectrometry-ams",
"short_description_en": "Uppsala University is a comprehensive research-intensive university with a strong international standing. Our mission is to pursue top-quality research and education and to interact constructively with society. Our most important assets are all the individuals whose curiosity and...",
"location_en": "Asia",
"location_fr": "Asia-Fr",
"start_date": "2020-03-03 10:05:18",
"end_date": "2020-03-13 10:05:18",
"category": [
"job",
"university",
"asia",
"PhD",
"history"
]
}
}
]
},
"aggregations": {
"category": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "job",
"doc_count": 112
},
{
"key": "university",
"doc_count": 112
},
{
"key": "PhD",
"doc_count": 56
},
{
"key": "asia",
"doc_count": 56
},
{
"key": "europe",
"doc_count": 56
},
{
"key": "history",
"doc_count": 56
},
{
"key": "law",
"doc_count": 56
},
{
"key": "researcher",
"doc_count": 56
}
]
}
}
众所周知,从数组中获取唯一(doc)计数会引起麻烦。尝试使用脚本化度量聚合
我认为这与你所追求的事件计数相对应。
GET pages/_search
{
"size": 0,
"aggs": {
"scripted_non_uniques": {
"scripted_metric": {
"init_script": "state.map = [:];",
"map_script": """
if (doc.containsKey('category')) {
for (def val : doc['category.keyword']) {
if (state.map.containsKey(val)) {
// increment if existing
state.map[val] += 1;
} else {
// initialize to increment later
state.map[val] = 1;
}
}
}
""",
"combine_script": " return state",
"reduce_script": " return states"
}
}
}
}
这将产生(基于您示例中的10个点击数)以下结果:
{
"took" : 17,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"scripted_non_uniques" : {
"value" : [
{
"map" : {
"law" : 5,
"researcher" : 5,
"university" : 9,
"asia" : 5,
"uppsala-university" : 1,
"history" : 5,
"job" : 10,
"europe" : 5,
"PhD" : 5
}
}
]
}
}
}
请注意,这个脚本会在一个category
数组中多次计算重复的类别,所以您也应该考虑这种边缘情况。
您可以通过调用debug来调试脚本代码。例如,当您在for循环中时,解释(val)。您可以在此处阅读有关脚本上下文的更多信息。
此处为elasticsearch新用户,但存在术语聚合问题。我为187份文档编制了索引,其中包含“名称”、“主机”、“风险”等字段。字段风险有4个唯一值(“关键”、“高”、“中”、“低”、“信息”),我正在运行这样的术语聚合: 我希望得到一个结果,说明我有x个临界值,x个高值等等。问题是,我没有得到返回的桶。 我的Elasticsearch版本是7.12.0有什么想法吗 > 编辑:这是映射: 以下
Elasticsearch支持模糊搜索查询:https://www.elastic.co/guide/en/elasticsearch/guide/2.x/fuzzy-match-query.html 和按术语的桶聚合:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket
问题内容: 我需要计算管道聚合返回的结果集中的存储桶数。问题是我的查询在这里使用脚本选择器: 返回类似这样的内容: 在该键下,我可以看到一个满足我条件的访问者列表(由标识的每个访问者都必须在索引中恰好有三个文档),但这不是很有用,因为它可以处理成千上万的访问者。我正在使用PHP处理结果,从理论上讲,它可以计算结果集,但是对于大量的访问者来说,这并不是最好的主意。有没有一种方法可以仅在和旁边输出有效
我必须创建聚合,计算日期范围中包含的文档数量。我的查询如下所示: 间隔:604800000等于7天。 结果,我重新强调了这些: 您可以要求我的buckets从29/12/2016开始,但作为范围查询,不包括此日期。我希望我的桶应该从01/01/2017开始,正如我在范围查询中指出的那样。此问题仅发生在间隔天数大于1的查询中。在任何其他间隔的情况下,它工作得很好。我试了一天,几个月和几个小时,效果很
Elasticsearch新手问题。我上了莎士比亚的课。json转换为Elastic,我正试图找出如何进行类似于按说话人从行组中计数(1)的聚合。(“Line”是文档的类型,“speaker”是属性之一。) 现在我有一个这样的查询: 结果看起来不错,但ElasticSearch文档指定术语聚合的文档计数是近似值(https://www.elastic.co/guide/en/elasticsear
但邮差回信说: 知道为什么或如何进一步调试它吗?Spring data-elasticsearch在做我不明白的事情吗? 我应该期待这样的事情: