1

私はelasticsearchでTireを実装しました。ローカルで私のプロジェクトは正常に実行され、インデックスの検索に問題はありません。しかし、アプリをサーバーにデプロイすると、次のエラーメッセージが表示されました。

Tire :: Search :: SearchRequestFailed(500:{"error": "SearchPhaseExecutionException [Failed to execute phase [query_fetch]、total failure; shardFailures {[hDTlT_K_Sl6P5regwKNJyg] [articles] [0]:QueryPhaseExecutionException [[articles] [0]: query [ConstantScore(NotDeleted(cache(_type:article)))]、from [0]、size [25]、sort [!]:クエリに失敗しました[メインクエリの実行に失敗しました]];ネスト:IOException[ソートできませんドキュメントごとに複数の値、またはフィールドごとに複数のトークンを持つ文字列タイプの場合];}] "、" status ":500}):

記事の作成中にエラーが発生しなかったため、記事はインデックスに保存されていると思います。また、これを使用して同じクエリを手動で実行しようとしました。

curl -XPOST 'http://localhost:9200/articles/article/_search' -d '{ 
    "sort": [ 
        { 
            "supplier_code": "desc" 
        } 
    ] 
}'

そして、私は実質的に同じ応答を得ました:

{"エラー": "SearchPhaseExecutionException [フェーズ[query_fetch]の実行に失敗しました、完全に失敗しました; shardFailures {[hDTlT_K_Sl6P5regwKNJyg] [articles] [0]:QueryPhaseExecutionException [[articles] [0]:query [ConstantScore(NotDeleted(cache(_type: article)))]、from [0]、size [10]、sort [!]:クエリに失敗しました[メインクエリの実行に失敗しました]];ネスト:IOException[ドキュメントごとに複数の値を持つ文字列タイプで並べ替えることはできません、またはフィールドごとに複数のトークン];}] "、" status ":500}

それで、誰かが私を正しい方向に向けることができますか?ローカルマシンで使用している正確なsam構成をコピーしました。奇妙なことに、サーバーでは機能しません。

ここで何が欠けていますか?

よろしくお願いします

編集:

実行しようとしている並べ替えが問題の原因であることがわかりました。また、それは私の記事オブジェクトのエラスティック検索へのマッピングと関係があります。

私がソートしようとしているフィールドの何かがnot_analyzedに置かれています私は正しいですか?1つのフィールドのみをマップする場合、すべてのフィールドを明示的にマップする必要がありますか?

4

1 に答える 1

2

これが実際の問題です。ドキュメントごとに複数の値、またはフィールドごとに複数のトークンを持つ文字列タイプで並べ替えることはできません。supplier_codeこれは、ドキュメントごとに複数のフィールドがあるか、フィールドsupplier_codeがアナライザーによって分析されて複数のトークンが生成されるかのいずれかを意味します(デフォルトのアナライザーは一部の文字列に対してそれを行います)。Elasticsearchは、レコードごとに1つ以下の値を含むフィールドでのみソートできます。したがって、複数のフィールドがある場合は、別のソートキーを考え出す必要があります。単一のフィールドがある場合は、not_analyzedにするか、複数のトークンを生成しない他のアナライザーを使用する必要があります。

于 2012-09-06T21:03:27.947 に答える