es mappings 文字欄位排序
阿新 • • 發佈:2018-12-20
es版本:5.6(以上版本應該沒問題)
es最操蛋的問題,版本改,api也改!!!所以不同版本api可能不同!
場景: 有的時候我們在使用es搜尋引擎的時候,一些欄位為文字欄位,但是我們需要根據這些欄位進行排序,而es預設不會為這些欄位開啟排序。
如下,我想要對symbol這個文字(字串)欄位進行排序:
可以看到報錯了。因為es預設不開啟文字欄位的fielddata,因為開啟之後es會將其載入到記憶體中,需要消耗一定的記憶體,所以預設不開啟。
解決:
搜尋官方文件,如下圖給出的解決方案(在text文字欄位上開啟fielddata以便支援排序和聚合):
此處注意: 這個api是5.6版本的,6.4版本的api又改了,型別type前面多了"_"
再次請求之後,我們點開mappings,看到symbol這個欄位開啟了fielddata(紫色部分):
接下來我們繼續用symbol欄位進行排序,結果如下圖:
附:
其實使用 es java api ,java中定義的實體型別可以對映到es,相當於指定es中mappings(欄位型別),但是由於兩邊支援的資料型別不完全一致,所以也不一定完全對應,特殊需求下還是需要指定mappings。
在建立索引之後,只需要通過相應的http請求指定索引的mappings,之後再插入資料即可。