2017-01-05 101 views
1

這裏Elasticsearch類型的對象是我的映射的簡化版本:一個字符串

{ 
    "mappings": { 
     "user-event": { 
      "_all": { 
       "enabled": true 
      }, 
      "properties": { 
       "account_id": { 
        "type": "string", 
        "index": "not_analyzed" 
       }, 
       "name": { 
        "type": "string" 
       }, 
       "payload": { 
        "type": "string", 
        "index": "not_analyzed" 
       }, 
      } 
     }, 
    } 
} 

目前​​是一個字符串,而這將是一個字符串化JSON有效載荷,例如:"{\"foo\": \"bar\"}"

是它可能將有效載荷類型更改爲JSON,以便ES自動分析字符串,因此我可以在​​上進行查詢?

如果不是,我是否必須在ES中寫入原始JSON才能查詢它?

+1

是的,這是可能的,但您需要修改您將數據發送給ES的方式:如何將文檔發送給ES? – Val

+0

這是我無法控制的下游服務。我寫信給一個kafka流,然後發佈到ES中。我該如何修改我寫的內容? – Kousha

+0

在寫信給Kafka之前,你能修改文件嗎?另一種方法是在Kafka之後做,它是否使用Logstash來使用Kafka併發送給ES? – Val

回答

0

ES沒有映射類型JSON,here所有可用類型。但你可以改變你的映射和使用nested型吧,以後你必須重新索引所有的數據,這重新索引過程中,你必須張貼不JSON字符串,但JSON對象,這樣的事情:

curl -XPUT localhost:9200/yourIndex/yourType/1 -d '{ 
    "account_id" : 1, 
    "name" : "Admin", 
    "payload": {"foo": "bar"} 
}' 

而且一切都會奏效!