es mappings 文本字段排序

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章