gpt4 book ai didi

elasticsearch - 如何在Elasticsearch中获取每个文档的重要术语聚合?

转载 作者:行者123 更新时间:2023-12-02 23:10:22 25 4
gpt4 key购买 nike

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

"my_id": {
"type": "keyword"
},
"titles": {
"type": "keyword",
"fields": {
"fulltext": {
"type": "text"
}
}
}

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

假设我使用以下内容为文档建立索引:
  • my_id =“MH123”
  • titles = [“《星球大战:新希望》,《星球大战:绝地归来》,《星球大战:帝国反击》]]

  • 我想根据每个文档ID返回 significant_terms聚合。例如...
  • 其中my_id =“MH123”
  • 重要术语是:“星球大战”

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

    我试图在存储桶中创建一个存储桶,第一个存储桶在ID上进行了分区,而内部存储桶返回了重要的条款。 ificant_terms返回一个空数组。
    {
    "aggs": {
    "titles": {
    "terms": {
    "field": "my_id"
    },
    "aggs": {
    "my_common_terms": {
    "significant_terms": {
    "field": "titles"
    }
    }
    }
    }
    }
    }

    最佳答案

    重要术语aggs与您期望的相反—它们在寻找unusual occurrences,而不是最常见的术语!

    例:

    PUT stars
    {"mappings":{"properties":{"my_id":{"type":"keyword"},"titles":{"type":"keyword","fields":{"fulltext":{"type":"text"}}}}}}

    然后索引一些具有相似ID的文档
    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
    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:
    GET stars/_search
    {
    "size": 0,
    "aggs": {
    "titles": {
    "terms": {
    "field": "my_id"
    },
    "aggs": {
    "my_common_terms": {
    "significant_terms": {
    "field": "titles",
    "min_doc_count": 1
    }
    }
    }
    }
    }
    }

    屈服
      "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
    }
    ]
    }
    }
    ]
    }
    }

    还有其他调整方法,但这就是使用重要术语的方式。

    您正在寻找的是带状过滤器,这是一个 good start

    关于elasticsearch - 如何在Elasticsearch中获取每个文档的重要术语聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61105835/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com