SearchParseException
ソート基準で使用されるフィールドを含まないドキュメントが見つかった場合、Elasticsearch は while parsing クエリをスローします。
SearchParseException: 解析の失敗 [ソートするための [価格] のマッピングが見つかりません]
price
一部のフィールドが欠落している場合でも、これらのドキュメントをうまく検索するにはどうすればよいですか?
SearchParseException
ソート基準で使用されるフィールドを含まないドキュメントが見つかった場合、Elasticsearch は while parsing クエリをスローします。
SearchParseException: 解析の失敗 [ソートするための [価格] のマッピングが見つかりません]
price
一部のフィールドが欠落している場合でも、これらのドキュメントをうまく検索するにはどうすればよいですか?
さらに掘り下げた後、以下のような解決策を見つけました。sort 句でignore_unmapped
明示的に設定する必要があります。true
"sort" : [
{ "rating": {"order" : "desc" , "ignore_unmapped" : true} },
{ "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]
詳細については、次の Elasticsearch リファレンスを参照してください。
両方の例をお探しの方は、こちらの私の回答
ignore_unmapped
をunmapped_type
ご覧ください。
「ignore_unmapped」は現在、「unmapped_type」を支持して非推奨になっていることに注意してください。これは#7039の一部として行われました
ドキュメントから: 1.4.0 より前は、ignore_unmapped ブール値パラメーターがありました。これは、発行する並べ替え値を決定するのに十分な情報ではなく、クロスインデックス検索では機能しませんでした。これは引き続きサポートされていますが、代わりに新しい unmapped_type に移行することをお勧めします。
デフォルトでは、フィールドに関連付けられたマッピングがない場合、検索リクエストは失敗します。unmapped_type オプションを使用すると、マッピングのないフィールドを無視し、それらでソートしないことができます。このパラメーターの値は、出力するソート値を決定するために使用されます。使用方法の例を次に示します。
{
"sort" : [
{ "price" : {"unmapped_type" : "long"} },
],
"query" : {
"term" : { "user" : "kimchy" }
}
}
照会されたいずれかのインデックスに price のマッピングがない場合、Elasticsearch は long 型のマッピングがあるかのように処理し、このインデックス内のすべてのドキュメントにはこのフィールドの値がありません。
どうやら、ElasticSearch は null 値でソートされません。null を (SQL の順序付けと同様に) 最初または最後にあるものとして扱うと想定していましたが、このエラーもトリガーされると思います。
したがって、このエラーが表示された場合は、並べ替え属性が ElasticSearch に送信されるときにデフォルト値を持っていることを確認する必要がある場合があります。
ソート列にデフォルト値がなかったため、Rails + ElasticSearch + Tireでこのエラーが発生したため、ESにnullとして送信されていました。
この問題は、null 値が処理されていることを示していますが、私の経験ではありませんでした。とにかく試してみる価値のあるものです。
エラスティックサーチ 6.4
単にインデックスを指定するだけで、Kibana で完了です
前
GET /_search
{
"query": {
"exists": {
"field": "document_id"
}
},
"sort": [
{
"document_id": { "order": "asc" },
"created_at": { "order": "desc" }
}
]
}
後
GET /document-index/contact/_search (here)
{
"query": {
"exists": {
"field": "document_id"
}
},
"sort": [
{
"document_id": { "order": "asc" },
"created_at": { "order": "desc" }
}
]
}