elasticsearch排序问题

chong1218 发布于 2017/07/26 16:17
阅读 221
收藏 0

@Medcl 你好,想跟你请教个问题:

数据结构为food_name(菜品名称),ingredients(主料),step(步骤),likenum(收藏数量)

通过关键字keyword输入内容查询范围在food_name,ingredients,step中

想通过es实现一下排序:

   1. 大的排序规则:作品名命中>主料命中>步骤命中,也就是说作品名命中的要排在主料命中的前面,主料命中的排在步骤命中的前面

  2. 作品名命中的结果中,排序规则如下:

   * 按照收藏数量进行排序,收藏数高的在上面

   * 主辅料、步骤、心得体会命中的结果中,排序规则同作品名命中规则

 

例如:输入关键字,会查出以下数据,

 

我本来想着用sort来实现,但是用sort来实现的话,算出来的score就失效了,效果很不理想,达不到要求,用以下方式来实现,效果也不是很理想。

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
            "must": {
                "multi_match": {
                    "query": "肉",
                    "fields": [
                        "food_name^800",
                        "ingredients^700",
                        "step^600"
                    ],
                    "type": "phrase_prefix",
                    "operator": "or"
                }
            },
            "filter": {
                "terms": {
                    "status": [
                        1,
                        2
                    ]
                }
            }
        }
      },
      "field_value_factor": {
        "field":    "likenum",
        "modifier": "square",
        "factor":   0.4
      },
      "boost_mode": "sum"
    }
  }
      
}

 

求教,谢谢~

加载中
当前问题已关闭评论
返回顶部
顶部