我尝试使用Elasticsearch Java API来动态创建Map。这很重要,因为我不想更改编译代码来更改Map。
几乎所有的例子都是使用XContentBuilder
来实现的,但是我想使用一个来自文件的JSON字符串。
代码:
client.admin().indices().preparePutMapping(indexName)
.setType("test")
.setSource(indexMapping)
.execute().actionGet();
字符串
文件字符串:
{
"test": {
"dynamic": "strict",
"_id": {
"path": "id"
},
"properties": {
"address": {
"index_analyzer": "ip4-pattern-analyzer",
"store": true,
"type": "string",
"fields": {
"raw": {
"index": "not_analyzed",
"type": "string"
}
}
}
}
}
型
}
从Elasticsearch PutMappingRequest.class
抛出的错误:
无法生成简化的Map定义
使用XContentbuilder
定义的相同JSON可以完美地工作。
String type = "test";
XContentBuilder jb = XContentFactory.jsonBuilder().
startObject().
startObject(type).
field("dynamic", "strict").
startObject("_id").
field("path", "id").
endObject().
startObject("_all").
field("enabled", "true").
endObject().
startObject("properties").
startObject("address").
field("type", "string").
field("store", "yes").
field("index_analyzer", "ip4-pattern-analyzer").
startObject("fields").
startObject("raw").
field("type","string").
field("index","not_analyzed").
endObject().
endObject().
endObject().
endObject().
endObject().
endObject();
型
3条答案
按热度按时间icomxhvb1#
请尝试以下操作:
在applicationContext.xml中有这样的内容:
字符串
然后你就可以
型
要在索引创建期间应用Map,请尝试:
型
如果你想在之后应用Map,请尝试:
型
oxiaedzo2#
我决定使用Jackson将json转换为map,然后使用XContentFactory.jsonBuilder()Map对象。然后将XContentBuilder直接传递给putMapping调用。
字符串
c9qzyr3d3#
你可以使用Jackson库。这个例子使用了elasticsearchTemplate。例如:
字符串
maven依赖:
型