0

现在尝试对查询结果进行排序。以下查询均无效:

{
  "sort": [
    {
      "name": {
        "order": "asc"
      }
    }
  ],
  "query": {
    "match_all": {}
  }
}

{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "name": {
        "order": "asc"
      }
    }
  ]
}

根据(文档),即使它们似乎是有效的。我在这里想念什么?顺便说一句,查询部分的顺序在 Elastic 中是否重要?

4

1 回答 1

5

我遇到了同样的情况。如果您的姓名字段映射为字符串并进行了分析,那么查询将永远无法正常工作。使用多字段类型,您可以在其中映射名称两次,一次为字符串并已分析,另一次为字符串且未分析。对于前

'user_id' =>array('type'=>'integer'),
'name' =>array(
     'type'=>'multi_field',
     'fields'=>array(
          'name'=>array('type'=>'string','index'=>'analyzed'),
          'sort_name'=>array('type'=>'string','index'=> 'not_analyzed')
      )
   )

使用上面的映射,您可以搜索名称字段,您可以使用 sort_name 进行排序。

{
 'query': {
  'query_string':{'query':'user_name*','fields':['name']}
  },
  'sort':[
  {
    'name.sort_name': {
    'order': 'asc'
    }
  }
  ]
}

参考链接:1) http://awesomism.co.uk/536336# 2) http://blog.wiercinski.net/2011/uncategorized/elasticsearch-sorting-on-string-types-with-more-than-one -每个文档的值或每个字段的多个令牌/

于 2012-12-27T10:11:53.390 回答