【问题标题】:Elasticsearch: can I avoid enabling fielddata on text fields?Elasticsearch:我可以避免在文本字段上启用 fielddata 吗?
【发布时间】:2025-12-14 20:35:01
【问题描述】:

我正在尝试获取按字段groupId 分组的最新记录,该字段类似于“group_a”

我按照接受的回答this question,但收到以下错误消息:

默认情况下,文本字段上的字段数据是禁用的。在 [your_field_name] 上设置 fielddata=true,以便通过反转倒排索引将 fielddata 加载到内存中。请注意,这可能会占用大量内存。

Elasticsearch docs中写着:

在启用 fielddata 之前,请考虑为什么要使用文本字段进行聚合、排序或在脚本中。 这样做通常没有意义

我使用的是文本字段,因为groupId 是一个字符串。 如果我想按 fielddata: true 分组,是否有意义

或者有其他选择吗?

使用"field": "groupId.keyword" (suggested here) 对我不起作用。

提前致谢!

【问题讨论】:

    标签: javascript amazon-web-services elasticsearch


    【解决方案1】:

    带有 .keyword 的建议答案是正确的。

    {
        "aggs": {
            "group": {
                "terms": {
                    "field": "groupId.raw"
                },
                "aggs": {
                    "group_docs": {
                        "top_hits": {
                            "size": 1,
                            "sort": [
                                {
                                    "timestamp (or wathever you want to sort)": {
                                        "order": "desc"
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }
    }
    

    使用这样的映射:

           "groupId": {
               "type": "text",
               "fields": {
                  "raw": {
                     "type": "keyword"
                  }
               }
            }
    

    【讨论】:

    • 感谢您的回答。我调整了映射,但仍然没有成功。能否请您提供您将使用的网址?我正在尝试GET /myindex/_search?search_type=count,如在其他解决方案中所见,已弃用。
    • 尝试:POST myindex/_search?pretty