通过Eclipse运行java弹性搜索查询 . 在我测试时遇到此错误,我无法在API中找到告诉我如何将此字段数据设置为true的任何位置
IllegalArgumentException [默认情况下,在文本字段上禁用Fielddata . 在[created]上设置fielddata = true,以便通过反转索引来加载内存中的fielddata . 请注意,这可能会占用大量内存 . 或者,也可以使用关键字字段 . ]
有谁知道我怎么解决这个问题?
您必须修改索引映射属性:
try (XContentBuilder jsonBuilder = XContentFactory.jsonBuilder()) { final XContentBuilder builder = jsonBuilder .startObject() .startObject("your_type") .startObject("properties") .startObject("your_field") .field("type", "text") .field("fielddata", true)/*setting fielddata*/ .endObject() .endObject() .endObject() .endObject(); client.admin().indices().preparePutMapping("your_index") .setType("your_type") .setSource(builder)/*also there are overloads for setSource()*/ .get(); }
OR
String source = "{\"your_type\":{\"properties\":{\"your_field\":{\"type\":\"text\",\"fielddata\":true}}}}"; client.admin().indices().preparePutMapping("your_index) .setType("your_type") .setSource(source, XContentType.JSON) .get();
Result:
{ "your_index": { "aliases": {}, "mappings": { "your_type": { "properties": { ... ... "your_field": { "type": "text", "fielddata": true, "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } ... ... } } } } }
在Elasticsearch 5.0中, String 字段分为两部分 - Text 和 Keyword . 如果该属性应该被分析,您需要将 String 字段迁移到 Text ,如果没有,则将它们迁移到 Keyword .
String
Text
Keyword
查看您的类型映射 - 如果您有这样的属性 -
{ "your_field": { "type" "string", "index": "not_analyzed" } }
你想把它转换成这个 -
{ "your_field": { "type" "keyword", "index": true } }
同样地,如果你的 property 应该被分析,你就像这样 -
{ "your_field": { "type" "string", "index": "analyzed" } }
那么你想把它转换成这个 -
{ "your_field": { "type" "text", "index": true } }
有关Elasticsearch official page的详细信息
2 回答
您必须修改索引映射属性:
OR
Result:
在Elasticsearch 5.0中,
String
字段分为两部分 -Text
和Keyword
. 如果该属性应该被分析,您需要将String
字段迁移到Text
,如果没有,则将它们迁移到Keyword
.查看您的类型映射 - 如果您有这样的属性 -
你想把它转换成这个 -
同样地,如果你的 property 应该被分析,你就像这样 -
那么你想把它转换成这个 -
有关Elasticsearch official page的详细信息