【问题标题】:How to fix ElasticSearch ‘Fielddata is disabled on text fields by default’ for keyword field如何修复关键字字段的ElasticSearch“默认情况下在文本字段上禁用字段数据”
【发布时间】:2023-03-30 15:35:01
【问题描述】:

我在关键字字段上收到“默认情况下在文本字段上禁用字段数据”。下面是代码。

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

user字段的映射如下

user: { type: "keyword" }

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

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

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

【问题讨论】:

  • 在聚合中使用这个"field": "user.keyword"
  • 那行不通。用户字段已设置为关键字。如果我将其映射为 user: {type: "text",fields: { keyword: { type: "keyword" } 那么使用 "user.keyword" 是有意义的
  • 哦,对不起..误解了。这是哪个ES版本?
  • 现在是 6.3 版
  • 这就是我的意思,这个错误是意料之外的。它是我代码中的关键字,我没有任何子字段。此外,它在一个应用程序实例中运行良好,而在另一个实例中引发错误。

标签: elasticsearch aws-elasticsearch


【解决方案1】:

comment of @Andrey Borisko 是正确的

我用过

"field": "user.keyword" 

而不是

"field": "user" 

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

【讨论】:

  • 如果您没有更改索引映射和/或重新索引的访问/权限,这就是要走的路。
【解决方案2】:

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

【讨论】:

  • 你能提供更多关于你是如何做到的吗? (v6.8)
  • 删除索引并重新创建。
  • 删除索引真的很有帮助,你可以在你的服务器终端中使用这个命令curl -X DELETE 'http://localhost:9200/your_index_name',如果你不知道你的索引的名字,你可以使用curl -X GET 'http://localhost:9200/_search',你会查看您的索引名称。如果默认设置有任何更改,请替换您的域名和端口。
【解决方案3】:

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

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

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

“字段”:“user.keyword”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2018-03-08
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多