如何在弹性搜索中对文本字段进行搜索的优先级?

时间:2015-06-04 18:02:41

标签: elasticsearch

这就是我为3部电影俱乐部制作关于某部电影的电影的模仿方式。

{

    "movie_name": "avengers,the age of ultron"
    "movie_ratings":
     {
         "canvasFilms": "average"
         "playHouse": "bad"
         "tubeRaters": "good"
         "bannersUnlimited": "excellent"
     }
}

现在,我想根据他们的评分对电影进行排序,这是我的偏好顺序是"优秀","良好","平均", "坏&#34 ;.但由于这不是字段中的数字,我无法进行这样的排序。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

这是你可以做到的一种方式,虽然它有点像黑客攻击:

POST /test_index/_search
{
   "query": {
      "match_all": {}
   },
   "sort": {
      "_script": {
         "script": "if (doc[field_name].value=='excellent'){ 4 } else if (doc[field_name].value=='good'){ 3 } else if (doc[field_name].value=='average'){ 2 } else if (doc[field_name].value=='bad'){ 1 } else { 0 }",
         "type": "number",
         "params": {
            "field_name": "movie_ratings.playHouse"
         },
         "order": "desc"
      }
   }
}

您必须拥有动态脚本enabled

以下是我用来测试它的一些代码:

http://sense.qbox.io/gist/c47aa6f5cdb1765354f3383076954cb4d2f5505b

更好的方法是在您进行索引时将序数评级值映射到另一个字段中的数字,然后对该字段进行排序。

修改:另请查看function scoring