136

SearchParseExceptionソート基準で使用されるフィールドを含まないドキュメントが見つかった場合、Elasticsearch は while parsing クエリをスローします。

SearchParseException: 解析の失敗 [ソートするための [価格] のマッピングが見つかりません]

price一部のフィールドが欠落している場合でも、これらのドキュメントをうまく検索するにはどうすればよいですか?

4

9 に答える 9

127

さらに掘り下げた後、以下のような解決策を見つけました。sort 句でignore_unmapped明示的に設定する必要があります。true

"sort" : [
       { "rating": {"order" : "desc" , "ignore_unmapped" : true} },
       { "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]

詳細については、次の Elasticsearch リファレンスを参照してください。

于 2013-06-11T19:13:40.220 に答える
55

両方の例をお探しの方は、こちらの私の回答ignore_unmappedunmapped_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 型のマッピングがあるかのように処理し、このインデックス内のすべてのドキュメントにはこのフィールドの値がありません。

于 2015-06-15T21:16:35.033 に答える
4

どうやら、ElasticSearch は null 値でソートされません。null を (SQL の順序付けと同様に) 最初または最後にあるものとして扱うと想定していましたが、このエラーもトリガーされると思います。

したがって、このエラーが表示された場合は、並べ替え属性が ElasticSearch に送信されるときにデフォルト値を持っていることを確認する必要がある場合があります。

ソート列にデフォルト値がなかったため、Rails + ElasticSearch + Tireでこのエラーが発生したため、ESにnullとして送信されていました。

この問題は、null 値が処理されていることを示していますが、私の経験ではありませんでした。とにかく試してみる価値のあるものです。

于 2015-03-29T08:17:14.827 に答える
2

エラスティックサーチ 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" }
    }
  ]
}
于 2018-09-09T02:40:46.483 に答える