我使用ElasticSearch Java API创建了一个ElasticSearch索引。现在我想对存储在此索引中的数据执行一些聚合,但是我收到以下错误:
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [item] 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."
正如本link所述,要解决此问题,我应该在“item”文本字段中启用fielddata,但是如何使用ElasticSearch Java API执行此操作?
替代方案可能是将“item”字段映射为keyword,但同样的问题:如何使用ElasticSearch Java API执行此操作?
答案 0 :(得分:1)
使用XContentBuilder,轻松创建json字符串来创建或更新映射。好像
.startObject("field's name")
.field("type", "text")
.field("fielddata", true)
.endObject()
使用 IndexRequest 创建新索引或使用 PutMappingRequest 更新旧映射后
答案 1 :(得分:0)
对于新索引,您可以在创建时通过执行以下操作来设置映射:
CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName);
String source = // probably read the mapping from a file
createIndexRequest.source(source, XContentType.JSON);
restHighLevelClient.indices().create(createIndexRequest);
映射的格式应与您可以针对其余端点执行的请求的格式相同,如下所示:
{
"mappings": {
"your_type": {
"properties": {
"your_property": {
"type": "keyword"
}
}
}
}
}
答案 2 :(得分:0)
我最近遇到了此问题,但就我而言,执行排序时遇到了此问题。我在另一个类似的问题-> set field data = true on java elasticsearch
中发布了该问题的有效解决方案