亲,只收二进制

ES电商条件排序 无解

Elasticsearch | 作者 huigy | 发布于2017年03月19日 | 阅读数:8995

首先按照匹配度排序 然后同一类型的匹配度再按照时间排序。比如用户输入意大利红酒。词库里面分别有意大利和红酒的词。当用户输入意大利红酒的时候搜索结果意大利红酒在前面,然后分别带意大利和红酒的标题在后面,那接下来要把最匹配到意大利红酒的按照时间排序。要怎么做。产品种类繁多,用户输入繁多。所以单独程序去为意大利红酒这几个字设置高权重是不现实的,有没有解决这一需求的统一的算法
已邀请:

shinehiy

赞同来自: arthuryoung

两种方案,1. 集群开一下script,写脚本自己排; 2. 抽出来,自己计算属性,排序返回,就是说es外面再套一层,因为有的时候要做boost,用es自己的机制确实不好使

occultskyrong - 程序猿

赞同来自: youryida


Elasticsearch Reference [5.5] » Query DSL » Compound queries » Function Score Query


跟我类似,我还有城市筛选。。
先用function score,把需要筛选的字段进行权重加成,不同字段给不同的权重。。
 
再加一个反馈,用户点击某个商品的时候,反馈给搜索,把某个关键词对应的结果的权重提高下。
没精力写一个总权重,有精力每个关键词给定一个权重。。
下次用户搜索某个关键词的时候,根据某个关键词给权重。。。
 
搜索,用户想要的才是关键。。不是你给他什么,而是他想要什么。。
 
所以我觉得反馈才是有意义的。。。

hailin0

赞同来自:

sort不是本身可以多字段排序的吗

huigy

赞同来自:

是的,但是排出来的效果不太好

i79627313

赞同来自:

用script实现

imp

赞同来自:

那还有根据上架时间  好评差评 价格适宜程度  用户点击次数 月销量再来排 

300斤的胖子

赞同来自:

请问楼主怎么解决的,我现在也遇到同样的问题

hapjin

赞同来自:

说一下我的理解吧:
可能你的索引Mapping里面有标题字段、有时间字段、应该还有其他等文本字段,这应该是多字段搜索问题。
当针对多个字段全文检索时,有2种方式:以词为中心和以字段为中心的搜索,以字段为中心的搜索可以通过best_fields、most_fields这些参数对字段评分进行调整,但是会存在白象化问题。 
而针对时间字段的排序,可考虑function_score提供的高斯衰减评分函数,可参考:score-query_function-decay

HelloClyde

赞同来自:

电商搜索和时间有什么关系,为什么要按照时间排。。。
 
电商搜索主要还是类目预测吧。。

要回复问题请先登录注册