搜索引擎 求救: ElasticSearch 对 String field 的自订排序顺序

chitsaou · 2014年03月21日 · 最后由 chitsaou 回复于 2014年03月24日 · 16249 次阅读

有个功能不知道怎么用 ElasticSearch 实现。

简单描述是这样:

  • 有一个 Post model,里面有 "state" 这个 field,用状态机表示,有 published, draft, taken_down 等狀态。
  • 使用了 ElasticSearch 建索引。(利用了 elasticsearch-model 这个 gem)
  • 前端希望它可以照 state 排序,但排序的顺序是 draft -> taken_down -> published

也就是说,希望可以对 ElasticSearch 下指令,让它依 state 排序,但顺序可以自订。

翻了 ElasticSearch 的文档,有提到 sort by function score,但不明白具体怎么实作,Google 一些关键字也没有我看得懂的(汗

所以想请教一下有没有人做过类似的功能,怎么实现的?

这可以算是用字符串存状态的一个缺点么..如果存整数{0 => "published", 1 => "draft", ..}就没问题了。

可以用 script score,通过doc['state'].value转换成不同的值,比如 draft 为 2,taken_down 为 1,published 为 0,不过建议还是直接存数值,script score 主要是用来做一些复杂的权重运算的,你的需求只是一个简单的排序,连原始的相似性_score 都忽略了

#1 楼 @hooopo #2 楼 @megayu

谢谢,的确直接存整数会简单许多。

我试出来再来贴上我的解法供参考…

需要 登录 后方可回复, 如果你还没有账号请 注册新账号