2017-06-24 52 views
2

私はスクリプトから配列に格納されたドキュメント値にアクセスする必要があります。配列内の項目の順序は重要です。elasticsearch doc ['...']配列と順序

[ '...']ドキュメントの使用

は、このクエリ使用して取得し、この

{ 
    "ar":[5,4,3,2,1] 
} 

のような単純な文書とし

:-(順序をミックスします配列を取得する:

{ 
    "query":{ 
    "match_all":{} 
    }, 
    "script_fields": { 
    "values": { 
     "script": { 
     "inline":"return doc['ar']" 
     } 
    } 
    } 
} 

は、逆順(ソート順)で配列を返します。[1,2,3,4,5] この現象を防ぐ方法はありますか?

私は_sourceをサポートしていない "has_child"クエリでこれが必要なので、私は_sourceを使うことに頼ることができません。

+0

いつも逆の順序で出力されましたか? – tom

+0

いいえ、すべての並べ替え最小値から最大値:-( –

+0

あなたのElasticSearchバージョンは何ですか?私は2.3.3バージョンでそれを試して、arの値は[5,4,3,2,1] –

答えて

0

Elasticsearchが配列フィールドをどのように索引付けしたかを知る必要があります。

similar question

フィールドを検索可能にするために、あなたは順序で元の配列をしたい場合は、あなたが使用することができ、配列フィールドが順にインデックス化され、あなたはdoc['ar'][0]

ようなスクリプトの最初の値を取得することはできません_sourceparams._source['ar']のようにすると、結果は[5,4,3,2,1]になりますが、使用よりも非常に遅いdoc

+0

私が言ったように、これは_sourceを使用することに頼ることができません。これは_sourceをサポートしていない "has_child"クエリです:-( –

+0

私はこの問題を別の方法で解決します。私の配列サイズは固定です。したがって、 'ar = {'1':5、 '2':4、....}'のように配列フィールドをオブジェクトに変更します。 'doc ['ar']'を返すと、オブジェクトキーで値を返すことができます。 – dddd1919

+0

配列は固定されていませんが、これはうまくいくかもしれません。 –

関連する問題