首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Elasticsearch中获得每个文档中的重要术语聚合?

如何在Elasticsearch中获得每个文档中的重要术语聚合?
EN

Stack Overflow用户
提问于 2020-04-08 16:50:31
回答 1查看 312关注 0票数 1

在Elasticsearch中,我的索引有以下定义的字段:

代码语言:javascript
复制
"my_id": {
    "type": "keyword"
},
"titles": {
    "type": "keyword",
     "fields": {
          "fulltext": {
              "type": "text"
          }
     }
}

每个文档存储多个titles (基本上是一个字符串数组)。

假设我用以下内容索引了一个文档:

  • my_id = "MH123“
  • 标题=“星球大战:新希望”、“星球大战:绝地归来”、“星球大战:帝国反击”

我想根据每个文档ID返回significant_terms聚合。例如.

  • 其中my_id = "MH123“
  • 重要的术语是:“星球大战”

我知道如何使用聚合跨文档执行significant_terms。但是,我无法让它在文档中的子聚合上工作。

我试图在桶中创建一个桶,其中第一个在ID上分区,内部一个返回重要的条件。significant_terms返回一个空数组。

代码语言:javascript
复制
{
    "aggs": {
        "titles": {
            "terms": {
                "field": "my_id"
            },
            "aggs": {
                "my_common_terms": {
                    "significant_terms": {
                        "field": "titles"
                    }
                }
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-04-08 18:08:28

重要术语aggs所做的与您所期望的相反--他们正在寻找异常事件,而不是最常见的术语!

示例:

代码语言:javascript
复制
PUT stars
{"mappings":{"properties":{"my_id":{"type":"keyword"},"titles":{"type":"keyword","fields":{"fulltext":{"type":"text"}}}}}}

然后用类似的ID索引一些文档

代码语言:javascript
复制
POST stars/_doc
{
  "my_id": "MH123",
  "titles": [
    "Star Wars: A New Hope",
    "Star Wars: Return of the Jedi",
    "Star Wars: \"Empire Strikes Back\""
  ]
}

POST stars/_doc
{
  "my_id": "MH124",
  "titles": [
    "Star Wars: A New Hope",
    "Star Wars: Return of the Jedi",
    "Star Wars: \"Empire Strikes Back\""
  ]
}

注意下一次uncommon terms字符串是如何在titles中的

代码语言:javascript
复制
POST stars/_doc
{
  "my_id": "MH125",
  "titles": [
    "uncommon terms",
    "Star Wars: A New Hope",
    "Star Wars: Return of the Jedi",
    "Star Wars: \"Empire Strikes Back\""
  ]
}

现在,将min_doc_count从默认的3减少到1

代码语言:javascript
复制
GET stars/_search
{
  "size": 0,
  "aggs": {
    "titles": {
      "terms": {
        "field": "my_id"
      },
      "aggs": {
        "my_common_terms": {
          "significant_terms": {
            "field": "titles",
            "min_doc_count": 1
          }
        }
      }
    }
  }
}

屈服

代码语言:javascript
复制
  "aggregations" : {
    "titles" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "MH123",
          "doc_count" : 1,
          "my_common_terms" : {
            "doc_count" : 1,
            "bg_count" : 3,
            "buckets" : [ ]
          }
        },
        {
          "key" : "MH124",
          "doc_count" : 1,
          "my_common_terms" : {
            "doc_count" : 1,
            "bg_count" : 3,
            "buckets" : [ ]
          }
        },
        {
          "key" : "MH125",
          "doc_count" : 1,
          "my_common_terms" : {
            "doc_count" : 1,
            "bg_count" : 3,
            "buckets" : [
              {
                "key" : "uncommon terms",
                "doc_count" : 1,
                "score" : 2.0,
                "bg_count" : 1
              }
            ]
          }
        }
      ]
    }
  }

还有其他方法来调整这一点,但这是如何使用有意义的术语。

你要找的是板条过滤器,这是一个良好开端

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61105835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档