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,之后再插入数据即可。