0

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 スキーム、つまり非整数ベースに切り替えるホイールを再発明するよりも、コストのかかるクエリ操作を使用します。

4

1 に答える 1

0

I was able to use: "from":0,"size" : 5,"query" : {"match_all" : {}}

type queries ignoring the id to get the behavior I was after. It was unclear to me from the api that you will get the same 0-4 records back even though there is no "id" explicitly defined identifying records 0-4. In fact, I am now just using string UUIDs for testing.

于 2013-04-27T01:21:47.927 に答える