1. 程式人生 > >es mappings 文字欄位排序

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