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,之後再插入數據即可。