ElasticSearch:统计一组文档中一组单词的出现频率 [英] ElasticSearch: Count Frequency of Occurrence of a Set of Words in a Set of Documents

查看:10
本文介绍了ElasticSearch:统计一组文档中一组单词的出现频率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下ElasticSearch查询:

{
  "from": 0,
  "sort": [
    "_score"
  ],
  "fields": [
    "id",
    "title",
    "text"
  ],
  "query": {
    "query_string": {
      "fields": [
        "title",
        "text"
      ],
      "query": "("green socks" OR "red socks") AND NOT ("yellow" OR "blue")"
    }
  },
  "size": 100
}

这可以很好地工作,并返回一组大约包含80,000个文档的文档。

我想对这80,000个文档集(即匹配"query": "("green socks" OR "red socks") AND NOT ("yellow" OR "blue")")的文档集)计算以下公式:

  • 每双"绿色袜子"计算编号。在80,000个文档中至少包含一次"绿色袜子"。
  • 对于每一只"红袜子",计算编号。在80,000个文档中至少包含一次"红袜子"。
  • 以此类推,对于位于上述查询字符串左侧的所有其他单词/短语。
  • 每个查询字符串中实际上大约有50-100个这样的单词/短语,所以我实际运行的查询字符串中又有50-100个这样的"红袜子"单词/短语。

这感觉像是聚合查询,但我就是看不到它。
感谢收到的任何帮助

谢谢,
R

推荐答案

您猜对了。这是聚合的工作。但是,如果您的映射不正确,聚合可能会很慢。例如,如果对可能包含大量标记的已分析字段(如"Text")进行聚合,则会导致较高的内存使用率,进而影响性能。

现在到了您的要求,您想要在80000个结果集中包含"red sock"的文档的计数。您希望术语出现在任何位置(表示在标题或文本字段中)或仅出现在特定字段中。如果希望它位于任何字段中,则需要首先将这些字段合并到单个字段中。

您可以在查询中使用简单的terms aggregation,它将提供该字段中所有术语的计数。

{
  .................
  "query": {
    "query_string": {
      "fields": [
        "title",
        "text"
      ],
      "query": "("green socks" OR "red socks") AND NOT ("yellow" OR "blue")"
    }
  },  
  "aggs" : {
    "my-terms" : {
        "terms" : {
            "field" : "title"
        }
    }
}

  "size": 100
}

如果您只想计算某些术语集,如"红袜子"、"绿袜子"等,则应使用filters aggregation

{
      .................
      "query": {
        "query_string": {
          "fields": [
            "title",
            "text"
          ],
          "query": "("green socks" OR "red socks") AND NOT ("yellow" OR "blue")"
        }
      },  
      "aggs" : {
        "my-terms" : {
          "filters" : {
            "filters" : {
              "red socks" :   { "term" : { "title" : "red sock"   }},
              "green sock" : { "term" : { "title" : "green sock" }},
               ......
              and so on...
             }
         }
    }

      "size": 100
    }

需要注意的是,如前所述,字段映射将影响聚合的性能和内存要求。

这篇关于ElasticSearch:统计一组文档中一组单词的出现频率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆