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

猜你喜欢

转载自blog.csdn.net/duoduo1636546/article/details/82463289