_idやfieldに使える文字の制限

Elasticsearch6.2.2を使わせていただいております。
_idやfieldに使える文字の制限についてどこかに情報ありますでしょうか。

●_id
試したところ、登録に使った文字が置き換わって登録されるケースがありました。

以下のデータを登録したところ、

PUT ttt/default/あいう
{
  "あいう":"あいう"
}

GET ttt/_search をすると以下が得られました。

  {
    "_index": "ttt",
    "_type": "default",
    "_id": "BDF",   ←「あいう」が「BDF」に置き換わっている
    "_score": 1,
    "_source": {
      "あいう": "あいう"
    }
  }

さらに以下を登録すると、「_id = あいう」のデータが上書きされました。

PUT ttt/default/BDF
{
  "BDF":"BDF"
}

また以下のリクエストでは同じデータが取得されました。

GET ttt/default/あいう
GET ttt/default/BDF

●field
fieldという呼び方が正しいのかわからないのですが、
登録するデータの "name":"value"の、nameに使える文字の制限を知りたいです。

文字種の制限についてはわかっていませんが、_idに”あいう"としたいのであれば
URLエンコードして渡せば _id: あいう で登録できましたよ。

PUT ttt/doc/%E3%81%82%E3%81%84%E3%81%86
{
  "あいう": "えお",
  "かきく": "けこ"
}
      {
        "_index": "ttt",
        "_type": "doc",
        "_id": "あいう",
        "_score": 1,
        "_source": {
          "あいう": "えお",
          "かきく": "けこ"
        }
      },

無用のトラブルを避ける観点で、2バイトの文字をidやfield名に指定しない方が良いように感じています。

1 Like

tsgkdtさん
早速の回答ありがとうございます。
_idはURLエンコードして扱うことでスラッシュやバックスラッシュや改行なども扱えそうですね。
_idとして2バイト文字は扱いたくないのですが、ユーザが任意の文字を入れる可能性があるので制限について知りたいのでした。

fieldについては制限あるかわかりますでしょうか。
または、制限があるときに回避する方法についても教えてただけると助かります。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.