0

私はそのような 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();

このマッピングをインデックスに追加しました:</p>

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 Plugin を使用して、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
        }
    }
}

}
4

1 に答える 1

0

あなたのマッピングを正しく読んだ場合、インデックスはタイトル フィールドの整数を待機し、文字列を指定します。したがって、インデックス作成は失敗します。

それがとても簡単であることを願っています。幸運を

于 2013-08-28T12:22:55.383 に答える