2013-08-27 40 views
0

我的問題是:我有一個JSONObject這樣的:關閉Elasticsearch中的動態映射,但自定義映射仍然不起作用?

{ 
    "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("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") 
.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().string(); 

加入這個映射到我喜歡的類型與後:

node.client().admin() 
       .indices().prepareCreate("test") 
       .addMapping("domaindata", mapping) 
       .execute().actionGet(); 

我還是得到了所有我indexresponse中的JSONObject的,看來我的映射不起作用。

有人能幫助我嗎?非常感謝!

+0

你可以找回你創建索引後提交的映射嗎?使用[get mapping api](http://www.elasticsearch.org/guide/reference/api/admin-indices-get-mapping/)? – javanna

+0

@javanna我用java來得到映射。它看起來與開始時定義的映射相同。 –

回答

1

這裏的問題是,使用靜態映射只意味着映射中不存在的字段將不會被添加到它,因此也不會被索引。但是,由於它們是您發送的源文檔的一部分,它們作爲_source字段的一部分返回。

如果您在here中提到的映射("enable":false)中禁用特定對象,也是一樣。該對象不會被解析或編制索引,但仍然是存儲的_source字段的一部分。

如果您想避免保存_source的部分內容,您可以使用here所述的源包含/排除功能。