【问题标题】:How to find top terms with occurrences in Elasticsearch如何在 Elasticsearch 中查找出现次数最多的术语
【发布时间】:2015-12-24 19:42:07
【问题描述】:

我在 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
            }
        }
    }
}

谁能帮帮我?

【问题讨论】:

    标签: elasticsearch aggregation querydsl elastic-stack


    【解决方案1】:

    我认为首先你需要在唯一的valueaggregate,然后是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
    }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-05
      • 2019-10-27
      • 2011-04-29
      • 2017-11-19
      • 2018-09-23
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多