如何修复关键字字段的 ElasticSearch“默认情况下在文本字段上禁用 Fielddata”

How to fix ElasticSearch ‘Fielddata is disabled on text fields by default’ for keyword field

我在关键字字段上得到 "Fielddata is disabled on text fields by default"。下面是代码。

{
 "aggs": {
   "agg_terms_user": {
     "terms": {
       "field": "user"
     }
   }
 }
}

用户字段的映射如下

user: { type: "keyword" }

由于用户字段的类型设置为关键字,所以我不应该收到错误。但是,仍然会抛出错误。

[illegal_argument_exception] Fielddata is disabled on text fields by default. Set fielddata=true on [user] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.

我不知道现在该尝试什么。

我找到了意外错误背后的原因。 ES 未正确重新编制索引。一旦我先删除索引然后重新创建它,它就开始像魅力一样工作。

是正确的

我用过

"field": "user.keyword" 

而不是

"field": "user" 

基于 Nikhil 的示例,它对我有用。

查看 elastic 中的文档,其中明确提到我们不能将文本字段用于聚合、排序或脚本

https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html#fielddata-mapping-param

这可以通过使用关键字来实现。尝试按

搜索

“字段”:“user.keyword”

在 heartbeat 中遇到同样的问题 application.I 已经按照以下步骤解决了这个问题。

  1. 停止应用程序[在我的例子中我停止了心跳 申请]

  2. 删除与应用程序相关的索引。

  3. 启动应用程序