elasticsearch支持对搜索结果排序,默认是根据相关度算分(_score)来排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。
对结果的排序语法如下:
对酒店数据按照用户评价降序排序,评价相同的按照价格升序排序,评价是score字段,价格是price字段,按照顺序添加两个排序规则即可。
执行后结果如下:按照评分的高低排序,如果评分相同,在按照价格升序排序。
实现对酒店数据按照到你的位置坐标的距离升序排序,获取经纬度的方式: https://jingweidu.bmcx.com/,这里以虹桥机场的经纬度为坐标,
代码如下:
执行后结果如下:
ES中分页跟MySQL很像,但是它的底层原理,有很大的差别,ES底层采用倒排索引,它的结构是不利于做分页的,实际上采用的是逻辑上的分页,比如查990到1000的数据,对ES来讲它或查询0到1000的所有数据,然后去截取990-1000的部分
这种截取在单点查询的时候没有问题,但是ES为了存储更多的数据,ES做了集群。
elasticsearch默认情况下只返回top10的数据。而如果要查询更多数据就需要修改分页参数了。
elasticsearch中通过修改from、size参数来控制要返回的分页结果:
ES做了集群,ES把数据进行了拆分放到不同的机器上,拆分出来的每一分叫做一个分片,每一个分片上的数据是不一样的,要查询990-1000的数据,就不知道是哪一个分片的前1000条数据了
ES是分布式的,所以会面临深度分页问题。例如按price排序后,获取from=990,size=10的数据:
如果搜索页数过深,或者结果集(from+size)越大,对内存和CPU的消耗也越高。因此ES设定结果集查询的上限是10000
针对深度分页,ES提供了两种解决方案,宜方文档:
注意:
按照价格price字段,安装asc生效排序分页,显示第一页10条数据如下:
1)from+size:
2)after search:
3)scroll:
高亮,就是在搜索结果中把搜索关键字突出显示。原理如下:
以百度搜索如下:
注意:
根据我们创建all字段搜索,而高亮字段是name字段,这时候搜索的字段和高亮的字段不一致,所以需要设置参数"require_field_match"为 "false",默认就会给添加标签<em>,就没在写pre_tag、post_tags
执行后如下:
结合排序、分页和高亮对于结果进行处理,后续可以按照这个案例使用:
执行后结果如下:
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:975644476@qq.com
本文链接:http://www.gawce.com/tnews/1051.html