fielddata is disabled on text fields by default
时间: 2024-04-26 22:24:48 浏览: 124
这是一个关于 Elasticsearch 的设置问题。"fielddata" 是 Elasticsearch 中一种用于聚合和排序的数据结构,在文本字段上默认是禁用的。这是因为对于大型数据集,启用 fielddata 可能会导致性能问题。如果您需要在文本字段上进行聚合或排序操作,您可以在创建索引时显式启用 fielddata。
相关问题
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is ElasticsearchStatusException[Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Fielddata is disabled on text fields by default. Set fielddata=true on [category] 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.]]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Fielddata is disabled on text fields by default. Set fielddata=true on [category] 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.]];] with root cause
这个异常信息是关于 Elasticsearch 的,大致意思是:在执行搜索时,所有分片都失败了。原因是在查询中使用了文本字段(text fields)的聚合(aggregation)功能,但是默认情况下,文本字段是禁用了 Fielddata(一个 ElasticSearch 中的内存结构,用于支持聚合、排序等操作)的。要解决这个问题,可以在查询中设置 `fielddata=true`,或者使用关键字字段(keyword field)代替文本字段。
在启动elasticsearch集群时第一台机子启动elasticsearch后报这条错误java.lang.IllegalArgumentException: Fielddata is disabled on text fields by default. Set fielddata=true on [type] 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.
这个错误提示是因为你在使用text类型的字段上启用了聚合(aggregation)或排序(sorting)等需要使用fielddata的功能。fielddata是一种用于在内存中加载倒排索引数据的机制,但它需要占用相当大的内存。
解决这个问题的方法有两个:
1. 在mapping中将该字段的fielddata设置为true,例如:
```
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"my_field": {
"type": "text",
"fielddata": true
}
}
}
}
}
```
2. 使用keyword类型的字段进行聚合或排序,例如:
```
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"my_field": {
"type": "keyword"
}
}
}
}
}
```
这样做的话,你就可以在使用聚合或排序功能时避免使用fielddata。
阅读全文