2013-11-22 152 views
3

我的數據結構非常通用。幾乎所有類型的數據都適合我的數據結構。動態類型與映射

Document{ 
    "id" : 12345678, 
    "fields" : 
     [{ 
      "name" : "Book title", 
      "value" : "Harry Potter", 
      "type" : "string" 
     }, 
     { 
      "name" : "price", 
      "value" : 34.50, 
      "type" : "float" 
     }] 
} 

另一個文件可能是這樣的:

Document{ 
    "id" : 123456790, 
    "fields" : 
     [{ 
      "name" : "Blog title", 
      "value" : "My awesome blog", 
      "type" : "string" 
     }] 
} 

這些數據可以更改和字段可以有任何類型和名稱。 如何動態創建模板映射,以便映射的「類型」由我的數據中「類型」的值設置? 例如值:34.50,同時輸入:float 同樣的數據「值」:「哈利波特」,類型:字符串

我已經看到這是在ES中完成的,但我無法把頭轉過去製作一個實際使用文檔中指定的「類型」值的映射,以實際爲該值設置正確的類型。

從某種意義上說,指定類型對我來說特別有用,例如位置類型,日期類型,整數或...在同一數據結構上。

我一直在嘗試在網上或書本中找到任何內容,但至今沒有任何內容。 這甚至可能嗎?

回答

2

首先,您需要使用nested類型來確保名稱上的查詢/過濾器未與同一文檔的其他字段的值混合在一起。其次,你不能有相同的字段名稱,在這種情況下,「價值」不同的類型。因此,您需要更改發送給Elasticsearch的配置的結構。

當你說「任何類型」時,你能控制類型的數量嗎?如果你這樣做,你可以做一些事情,比如名爲「date_value」,「location_value」,「float_value」(或類似的東西)等等。 「string_value」並不是一個好的選擇。它有什麼分析儀?爲其目的命名的類型可能更好,例如「keyword_value」(例如,您可能想要面向的內容),「name_value」(可以具有模糊支持),「text_value」(針對正確搜索進行分析)等等。

我做了一個可運行的例子,你可以在這裏玩:https://www.found.no/play/gist/7596633

+0

嗨亞歷克斯,感謝你的努力。在我的例子中,我忘記了將對象放在數組中。在數組的情況下,它仍然是相同的?例如文檔{字段[{字段},{字段}]} – Reza

+0

我剛剛意識到你確實使用了一個數組:)我正在檢查它 – Reza