elasticsearch,jsonobject,Dynamic,Indexing,Mapping,elasticsearch,Jsonobject" /> elasticsearch,jsonobject,Dynamic,Indexing,Mapping,elasticsearch,Jsonobject" />

Dynamic 如何通过在Elasticsearch中设置自定义映射来索引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",

我有这样一个JsonObject:

{
"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的形式发布(为了可读性)。非常感谢。你说得对。我犯了一个愚蠢的错误。这很有效。