0

クエリ結果を今すぐ並べ替えようとしています。以下のクエリはどちらも機能しません。

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

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

(ドキュメント)によると、それらは有効であるように見えますが。ここで何が欠けていますか?ちなみに、Elasticではクエリパーツの順序はまったく重要ですか?

4

1 に答える 1

5

私は同じケースに直面しました。名前フィールドが文字列としてマップされ、分析された場合、クエリは機能しません。名前を 2 回マッピングできるマルチ フィールド タイプを使用します。1 つは文字列として分析され、もう 1 つは文字列として分析されません。例の場合

'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 に答える