Dynamic 如何通过在Elasticsearch中设置自定义映射来索引jsonObject的部分?
我有这样一个JsonObject:Dynamic 如何通过在Elasticsearch中设置自定义映射来索引jsonObject的部分?,dynamic,indexing,mapping,
elasticsearch,jsonobject,Dynamic,Indexing,Mapping,
elasticsearch,Jsonobject,我有这样一个JsonObject: { "success": true, "type": "message", "body": { "_id": "5215bdd32de81e0c0f000005", "id": "411c79eb-a725-4ad9-9d82-2db54dfc80ee", "type": "metaModel", "title": "testchang", "authorId": "5215bd552de81e0c0f000001",
{
"success": true,
"type": "message",
"body": {
"_id": "5215bdd32de81e0c0f000005",
"id": "411c79eb-a725-4ad9-9d82-2db54dfc80ee",
"type": "metaModel",
"title": "testchang",
"authorId": "5215bd552de81e0c0f000001",
"drawElems": [
{
"type": "App.draw.metaElem.ModelStartPhase",
"id": "27re7e35-550j",
"x": 60,
"y": 50,
"width": 50,
"height": 50,
"title": "problem engagement",
"isGhost": true,
"pointTo": "e88e2845-37a4-4c45-a030-d02a3c3e03f9",
"bindingId": "90f79d70-0afc-11e3-98d2-83967d2ad9a6",
"model": "meta",
"entityType": "phase",
"domainId": "411c79eb-a725-4ad9-9d82-2db54dfc80ee",
"authorId": "5215bd552de81e0c0f000001",
"userData": {},
"_id": "5215f4c5d89f629c1700000d"
},
{...}
]
}}
String mapping=XContentFactory.jsonBuilder().startObject().
startObject("domaindata").field("dynamic","false").
startObject("properties")
.startObject("success").field("type","string").endObject()
.startObject("type").field("type","string").endObject()
.startObject("body").field("type", "object")
.startObject("properties")
.startObject("id").field("type","string").field("store","yes").endObject()
.startObject("type").field("type","string").field("store","yes").endObject()
.startObject("title").field("type","integer").field("store","yes").endObject()
.startObject("drawElems").field("type","nested")
.startObject("properties")
.startObject("type").field("store","yes").field("type","string").endObject()
.startObject("title").field("store","yes").field("type","string").endObject()
.endObject().endObject().endObject().endObject().endObject().endObject().endObject().string();
我只想索引这个对象的一部分,所以我自己定义了一个显式映射,并禁用了动态映射以下是映射:
{
"success": true,
"type": "message",
"body": {
"_id": "5215bdd32de81e0c0f000005",
"id": "411c79eb-a725-4ad9-9d82-2db54dfc80ee",
"type": "metaModel",
"title": "testchang",
"authorId": "5215bd552de81e0c0f000001",
"drawElems": [
{
"type": "App.draw.metaElem.ModelStartPhase",
"id": "27re7e35-550j",
"x": 60,
"y": 50,
"width": 50,
"height": 50,
"title": "problem engagement",
"isGhost": true,
"pointTo": "e88e2845-37a4-4c45-a030-d02a3c3e03f9",
"bindingId": "90f79d70-0afc-11e3-98d2-83967d2ad9a6",
"model": "meta",
"entityType": "phase",
"domainId": "411c79eb-a725-4ad9-9d82-2db54dfc80ee",
"authorId": "5215bd552de81e0c0f000001",
"userData": {},
"_id": "5215f4c5d89f629c1700000d"
},
{...}
]
}}
String mapping=XContentFactory.jsonBuilder().startObject().
startObject("domaindata").field("dynamic","false").
startObject("properties")
.startObject("success").field("type","string").endObject()
.startObject("type").field("type","string").endObject()
.startObject("body").field("type", "object")
.startObject("properties")
.startObject("id").field("type","string").field("store","yes").endObject()
.startObject("type").field("type","string").field("store","yes").endObject()
.startObject("title").field("type","integer").field("store","yes").endObject()
.startObject("drawElems").field("type","nested")
.startObject("properties")
.startObject("type").field("store","yes").field("type","string").endObject()
.startObject("title").field("store","yes").field("type","string").endObject()
.endObject().endObject().endObject().endObject().endObject().endObject().endObject().string();
我在索引中添加了此映射:
node.client().admin()
.indices().prepareCreate("testdomaindata")
.addMapping("domaindata", mapping)
.execute().actionGet();
并使用以下代码编制索引:
node.client().prepareBulk().add(node.client()
.prepareIndex("testdomaindata","domaindata",string).setSource(responseDomainData1))
.execute().actionGet();
我使用了GetResponse和Head插件来检查jsonObject的索引是否正确。但是这个映射的问题是,jsonObject似乎根本没有索引。
在head插件中,已创建索引和类型,但此索引和类型中没有文档
我是否定义了错误的映射?或者我的其他代码中有一些错误?
谁能给我一些建议吗?
非常感谢
以下是我在索引元数据中得到的映射:
{
domaindata:
{
dynamic: false
properties: {
body: {
properties: {
id: {
store: true
type: string
}
title: {
store: true
type: integer
}
drawElems: {
properties: {
title: {
store: true
type: string
}
type: {
store: true
type: string
}
}
type: nested
}
type: {
store: true
type: string
}
}
}
type: {
type: string
}
success: {
type: string
}
}
}
}
如果我正确读取了映射,索引将等待标题字段的整数,然后给它一个字符串。因此,你的指数化失败了 希望事情就这么简单。
祝你好运地图真的创建了吗?您使用的是head,因此请检查元数据是否已创建。如果可能的话,以json的形式发布(为了可读性)。非常感谢。你说得对。我犯了一个愚蠢的错误。这很有效。