2016-08-25 10 views
0

Amazon Elasticsearchサービス(v1.5およびv2)でElasticsearchを実行しているところに問題があります。 3)以下のエラーを返す保つ:ClassCastException追加のフィールドでソートしようとすると、Elasticsearchのjava.lang.DoubleにLongをキャストできません。

{u'status': 503, u'error': u'ReduceSearchPhaseException[Failed to execute phase [query], [reduce] ]; nested: ClassCastException[java.lang.Long cannot be cast to java.lang.Double]; '} 

ここでのpythonでelasticsearchクエリです:私はローカルで実行elasticsearchドッカコンテナを持っている場合

def search_es(q, indices): 
    es = get_search_client() 
    search_body = { 
     "sort": [ {'importance_score': 'desc'}, '_score', ], 
     "query": { 
      "match": { 
       "display_name": q 
      } 
     } 
    } 
    try: 
     res = es.search(index=indices, body=search_body) 
    except TransportError as e: 
     assert False, e.info 

    data = [] 
    for hit in res['hits']['hits']: 
     data.append(hit['_source']) 
    return data 

上記のコードは完璧に動作します。しかし、AWSバージョンのESを使用したテスト環境では何とか失敗します。私はここで太字部分を削除した場合

は、クエリが(ただし、望ましくない順序で)エラーなしで実行:

"ソート":[{ 'importance_score': 'DESC'}、 '_score'] 、

これは、私がそこに何かがあると信じさせる。 importance_scoreはインデックス作成の前に計算された通常のキーです。最大値は19です。インデックス作成前にfloat、int、およびlongとしてキャストしてバリエーションを試しました。それらはすべてローカルで動作しますが、テスト環境で同じエラーが返されます。

ES v2.3にアップグレードすると、エラーメッセージの構造が変更されますが、基本的に同じエラーが返されます。

これは何が原因でしょうか?助けてくれてありがとう。

+0

'importance_score'フィールドのマッピングは何ですか?あなたは同じフィールドを持つ他のタイプを持っていますか? ES 2.3のエラーは何ですか? –

+0

これに遅れて申し訳ありませんが、important_scoreがドキュメントに基づいて異なるタイプに自動化されていたという問題がありました。明示的なマッピングを使用することによって、すべてを長くすることは、この問題を解決しました。 – ShravanP

答えて

0

異なる文書型のimportance_scoreが異なるプリミティブ型に動的にマッピングされていました。すべてのマッピングがimportance_scoreにlongを使用するように強制すると、問題が修正されました。

関連する問題