ElasticSearch的劈山斧-自定义评分

ElasticSearch自定义评分

一、适用的场景

1.基本介绍

ES的使用中,ES会对我们匹配文档进行相关度评分。但对于一些定制化的场景,默认评分规则满足不了我们的要求。这些定制化场景,ES也是推出了自定义评分方式来进行支持。可以使用ES提供的一些函数,什么可以使用较分来让我们的评分规则多样化我举个大家都很熟悉的场景,在点外卖时候,大家是不是有一个综合排序,比如用户希望通过距离和价格来进行综合排序,这在mysql中是不是比较难以实现,接下来我将由简到繁的来教你如何在ES中实现这种综合评分排序的功能

2.使用场景

2.1根据价格评分排序

在mysql中我们可以通过价格从高到低,从低到高排序,但是像订酒店那样,用户有期望价格的,酒店越符合用户的期望价格,评分越高。mysql的排序这时候是不是有点捉襟见肘了。废话不多说了,直接来ES实现。

{

    "from": 0,

    "size": 12,

    "query": {

        "function_score": {

            "query": {

                "bool": {

                    "must": [

                        {

                            "term": {

                                "price": {

                                    "value": 50,

                                    "boost": 1.0

                                }

                            }

                        }

                    ],

                    "adjust_pure_negative": true,

                    "boost": 1.0

                }

            },

            "functions": [

                {

                    "filter": {

                        "match_all": {

                            "boost": 1.0

                        }

                    },

                    "gauss": {

                        "price": {

                            "origin": 50,

                            "offset": 0,

                            "scale": "25",

                            "decay": 0.5

                        }

                    }

                }

            ]

        }

    },

    "sort": [

        {

            "_score": {

                "order": "desc"

            }

        }

    ]

}
2.2根据距离评分排序

在我们日常使用的场景,我们经常有需要根据距离来进行排序评分,常见的App中都是有一个距离更近,来筛选商户。接下来就来看看ES的实现。

{

    "from": 0,

    "size": 12,

    "query": {

        "function_score": {

            "query": {

                "bool": {

                    "must": [

                        {

                            "term": {

                                "price": {

              &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值