Elasticsearch を使用して、さまざまなクライアント アプリケーションからドキュメントを挿入しています。別のクライアントが挿入を行っているため、次の ID をローカルに隠しておくことはできません。elasticsearch で次に予想される ID を検索する必要があります。サイトの多くの「twitter」の例で行われているような整数に基づく ID 生成スキームを使用しています。私の質問は、最後のIDを検索するのに最適な方法ですか? ID は文字列として保存されるため、次のような並べ替え操作を実行しても機能しません。
curl -XGET 'http://localhost:4040/search/geolocations/geos/_search' -d '{
"sort": [
{
"_id": {
"order": "asc"
}
}
],
"query": {
"match_all": {}
}
}'
上記の場合、1,2,10,11 が格納されている場合: 結果は "2" が最大になります...これは文字列では正しいかもしれませんが、整数では正しくありません。
従来の文字列 UUID への切り替えとは対照的に、ここでは整数 ID を使用したいと思います。
私は使用を検討しています: http://www.elasticsearch.org/guide/reference/query-dsl/script-filter/
ID文字列を整数にキャストするスクリプトを実行するには...しかし、それも悪いアプローチのようであり、JSONとMVELの構文を組み合わせてどのように機能するかは不明です。
次の方法で試行しました:
curl -XGET 'http://localhost:4040/search/geolocations/geos/_search' -d '{
"sort": {
"_script": {
"script": "doc['_id'].value",
"type": "number",
"order": "asc"
}
},
"query": {
"match_all": {}
}
}'
ただし、解析しないことに注意してください。
別の注意として、新しいレコードを追加する操作はあまり頻繁ではないため、ここでのパフォーマンスはそれほど重要ではありません。ここでは、すべてを別の ID スキーム、つまり非整数ベースに切り替えるホイールを再発明するよりも、コストのかかるクエリ操作を使用します。