弹性搜索对字符串本身中的单词进行排序,而不是整体结果

时间:2015-05-29 22:37:19

标签: sorting elasticsearch

当我做

之类的事情时
    {
  "sort": [
    {
      "name": {"order": "desc"}
    }
  ]}

结果名称在该名称字符串本身内排序,而不是整个结果:

"name" : "Test asdf"

排序值是

"sort": ["asdf"]

这是预期的吗?如何通过名称字段对结果进行整理排序并按指定顺序排序(asc与desc)

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

如果您无法将映射更改为not_analyzed或使用keyword分析器,请使用脚本进行排序:

{
  "query": {
    "match_all": {}
  },
  "sort": {
    "_script": {
      "script": "_source.name",
      "lang": "groovy",
      "type": "string",
      "order": "desc"
    }
  }
}

当然,这需要启用动态脚本。如果您无法启用或不想启用它,请将脚本置于文件中并在查询中使用该脚本:

{
  "query": {
    "match_all": {}
  },
  "sort": {
    "_script": {
      "script_file": "source_sorting_script",
      "lang": "groovy",
      "type": "string",
      "order": "asc"
    }
  }
}

其中source_sorting_script.groovy仅包含_source.name,应放在/config/scripts目录下。