在弹性搜索中基于字符串值排序

时间:2015-05-26 15:53:21

标签: elasticsearch

我在数据中有称为“评级”的字段。该字段的值将是以下“好”,“平均”或“坏”之一。我想要得到的是根据他们拥有的“评级”字段值对文档进行排序。由于字段值是字符串,我如何根据该值进行排序?

2 个答案:

答案 0 :(得分:4)

据我所知,您希望“rating”字段中的值被赋予权重,然后按降序对它们进行排序。 您可以使用以下脚本:

 "sort": {
    "_script": {
      "script": "factor.get(doc[\"rating\"].value)",
      "type": "number",
      "params": {
        "factor": {
          "good": 2,
          "average": 1,
          "bad": 0
        }
      },
      "order": "desc"
    }
  }

这将为“rating”数组中的元素提供数值,然后按降序对文档进行排序。 有关详细信息,请参阅here

答案 1 :(得分:1)

您可以sort on a text field(我建议在未分析的字段上执行此操作),如果按升序排序,文档将按字母顺序排序,如果排序则按反向字母顺序排序按降序排列。

示例:

POST index/type/_search
{
    "query":{
        "match_all": {}
    },
    "sort":{"my_not_analyzed_field":{"order":"asc"} }
}

此代码将匹配 type 类型的索引 index 中的每个文档,并按字母顺序对它们进行排序。

注意:理论上它适用于分析的字段,但如果内容已被标记化,结果将会令人惊讶,因为结果不会根据字符串的开头排序,而是使用字符串的任何单词(标记),采取更“有利”的一个。