我在Elasticsearch中有一个相当大的数据集:1个索引,一种类型的大约1.2亿条记录。我正在处理关于给定主题的大量段落。主题的数量是有限的,并且与唯一的ID相关联。每个段落都有几个由sentence_id
标识的句子(在所有主题中都是唯一的)。每个句子有多个单词,每个单词可以出现多次。因此,我的mapping
如下所示:
{
"sentence_id": 1200,
"topic_id": 2,
"value": "ground",
"occurrences": 20
}
现在,我想运行一个查询来回答这个问题:
“找到给定主题ID的最高单词,并按其出现顺序进行排序。”
因此,对于主题中的每个单词,我必须对所有句子中的单词进行
sum up
,对其进行sort
并返回。我无法实现这一目标。我尝试编写
aggregation term query
,但是它不求和出现,而只是返回每个单词的唯一记录数。{
"query": {
"term": {
"topic_id": {
"value": 3117
}
}
},
"aggs": {
"total_occurrences": {
"terms": {
"field": "occurrences",
"size": 1000
}
}
}
}
有人可以帮我吗?
最佳答案
我认为您首先需要在唯一的aggregate
上添加value
,然后在其sum
上添加 occurrences
,假设您的occurrences
字段为numeric
,您的查询应类似于以下内容
{
"query": {
"term": {
"topic_id": {
"value": 3117
}
}
},
"aggs": {
"total_occurrences": {
"terms": {
"field": "value",
"size": 1000,
"order": {
"sum_occurrences": "desc" <--- to sort by top words
}
},
"aggs": {
"sum_occurrences": {
"sum": {
"field": "occurrences"
}
}
}
}
},
"size": 0
}
希望这可以帮助!
关于elasticsearch - 如何在Elasticsearch中查找出现的热门词语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34457251/