ElasticSearch搜索结果处理

        经过第一章的学习,我们已经能够利用DSL语法,从海量数据当中检索出你想要的那一部分。但是数据查询之后,往往还需要对这个搜索的结果去做一些处理,比如说排序,所以我们这一章就是来看这个ES当中的搜索结果处理的,主要包括排序、分页、高量。

        我们先来看一下排序的处理。ES它其实默认也是有排序的。我们上一章已经说过,是按照相关度算分排序,分值越高,排名越高前。但是有的时候我们可能希望按照别的东西做排序,比如价格对吧?或者是按照这个日期更新一点的日期,去排序都有可能。

        所以我们ES是允许你自己指定排序字段的。你一旦自己指定排序字段,ES就会放弃打分。那么这样查询的效率上面也会有一定的提升。它支持的排序字段的类型,比较常见的有keyword类型、数值类型、日期类型,还有地理坐标类型。

        那么数值类型和日期类型,可能大家觉得会更多一点,比如说你价格就是一个数值类型的,日期、创建时间、更新时间,这不就是日期类型的吗?

        Keyword的类型是字符串,它的排序其实是按照字母顺序排序,或者叫字典顺序排序,这种其实用的比较少,地理坐标也比较常见比如说我想搜索到我这里最近的酒店,然后你就可以在地图上指定一个点。然后,我们的ES就可以去算一算周围的酒店,到你的距离是多少,然后做一个升序排序,这种地理坐标排序。因为它的数据类型不一样,所以它的语法上也有一定的差异。

        其中Keyword、数值和日期这三种,他们的语法排序语法基本上是一样的,大概是这样子。

        大家可以看到,首先是一个查询,然后这边来个query。这个query是我们上一章当中所讲的,上一章所讲的所有DSL是不是都写在query内部的

这个query是我们上一章当中所讲的,上一章所讲的所有DSL是不是都写在query内部的,而我们这一章要讲的叫搜索结果处理它跟query是同级的关系,不是写在query里边,大家别搞错。

那我们这里讲的是一个sort,所以这就是sort排序,它是一个数组。也就意味着将来你可以指定多个排序字段,这就像我们的mysql里面,mysql里的order by 是不是可以指定多个呀?比如说这里指定一个,将来你还可以继续去指定:  如果有多个要排序的情况下,先按照第一个字段排,第一个字段相等,再按第二个字段排,这一点跟mysql里面也是一样的。

具体排序的语法怎么来写,大家可以看到这里先指定一个字段名,你要根据哪个字段排,是价格还是日期呀,然后指定排序的方式是asc升序还是dsc降序,这是简单类型;

地理坐标类型它的语法就复杂,他这么写的叫geo_distance,然后分别去指定三个内容。第一是field,field就是字段:你要对哪个字段去做一个排序,比方说地理坐标location,后边指定你要排序的中心点经纬度坐标,然后order就是顺序,跟这边一样。

unit是单位,就是你排序完以后,那个结果是按照公里km展示,还是按照m展示都可以。这也是我们的两种常见的查询的一个语法。

下边我们从案例来演示一下。那第一个案例是对酒店数据按照用户评价降序排序,如果评价相同,我们再按照价格升序排序,那也就是说这里排序的字段其实是两个, 你在搜索的时候,我先按照用户评价给你排,评价越高,排名越靠前。但是如果评价相同的情况下,我再按照价格排。那也就是说将来我们写两个排序字段ok,一个是降序,一个升序:

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值