ES 中怎样将关联度最高同时按指定字段降序排列?

2018-06-21 08:38:53 +08:00
 Reign

目前站内搜索当中,需要的情形如下:用户搜索关键词,比如“摩天轮图片”,ES 进行排序时,需要权衡“关联度”和“点赞数字段”,也就是说将关联度最高同时点赞数最多的图片排在最前面,目的就是尽可能给访客展示关联度最高同时点赞数最多的图片在面,ES 中怎样实现这一排序?

3659 次点击
所在节点    程序员
4 条回复
seaver
2018-06-21 08:58:35 +08:00
function score
yamedie
2018-06-21 09:30:32 +08:00
搜索是后台做的, 是全字匹配还是模糊查询? 有"关键词出现次数"或者"相似度"这种能量化成数字的指标吗? 如果有, 就可以按(指标*权重 + 点赞数*权重)进行降序排序了吧
pandachow
2018-06-21 10:45:28 +08:00
function score
loongwang
2018-06-21 10:51:07 +08:00
GET /xxxxxx-v2/song/_search?explain

{

  "query": {

    "function_score": {

      "query": {

        "bool": {

          "should": [

            {

              "match_phrase_prefix": {

                "name": {

                  "query": "我的一个道姑朋",

                  "boost": 2

                }

              }

            },

            {

              "nested": {

                "path": "artists",

                "query": {

                  "bool": {

                    "should": [

                      {

                        "match_phrase": {

                          "artists.name": "我的一个"

                        }

                      }

                    ]

                  }

                }

              }

            }

          ]

        }

      },

      "field_value_factor": {

        "field": "score",

        "modifier": "log1p",

        "factor": 0.1

      },

      "boost_mode": "sum"

    }

  },

  "sort": {

    "_score": {

      "order": "desc"

    }

  }

}

仅供参考

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/464592

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX