2017-09-09 5 views
1

リストの長さで検索をソートしようとしています。私は私がelasticsearchのドキュメントといくつかのGoogle検索に続いて、私は、このフィールドでソートするように見えるかもしれない[「ジョン・ドウ」、「マイク・スミス」]たいElasticsearchリストの長さでソートする方法

"authors": { 
    "type": "text", "norms": { "enabled": False }, "analyzer": "autocomplete_with_asciifolding", "search_analyzer": "with_and_without_accent_search", "position_increment_gap": 100, 
    "fields": { 
     "raw" : { # This field is needed for your_paper suggestions search 
      "type" : "string", 
      "analyzer" : 'lower_keyword' 
     } 
    } 
} 

によって定義されたフィールド

を持っています

doc['sort'] = { 
      "_script": { 
       "type": "number", 
       "script": "doc['authors'].length", 
       "order": "asc" 
      } 
     } 

を見つけた私もDOC [ '著者']を試してみました。values.length()とDOC [ '著者']。values.size()、しかし、それらのすべてが

TransportError: TransportError(500, u'search_phase_execution_exception') 
0になります

リストの長さでソートする方法はありますか?

答えて

1

はパフォーマンス上の理由からdoc['authors']にアクセスできません。

あなたは、例えば、あなたの内側のフィールドrawに真= fielddata設定することができます。

代わり authors.rawによって
"authors": { 
    "type": "text", "norms": { "enabled": False }, "analyzer": "autocomplete_with_asciifolding", "search_analyzer": "with_and_without_accent_search", "position_increment_gap": 100, 
    "fields": { 
     "raw" : { # This field is needed for your_paper suggestions search 
      "type" : "string", 
      "analyzer" : 'lower_keyword', 
      "fielddata": True 
     } 
    } 
} 

とソート:

doc['sort'] = { 
      "_script": { 
       "type": "number", 
       "script": "doc['authors.raw'].length", 
       "order": "asc" 
      } 
     } 

別の解決策は、新しいインナーフィールドを作成することですタイプkeywordで、それを並べ替えます。しかし、私はrawを使用するように提案しました。なぜなら、そのアナライザは大文字小文字を低くします。

関連する問題