明示的マッピング

あなたはElasticsearchが推測できる以上にデータについて知っていますので、動的マッピングは開始するのに役立ちますが、ある時点で自分自身の明示的なマッピングを指定したくなるでしょう。

インデックスを作成するときや、既存のインデックスにフィールドを追加するときにフィールドマッピングを作成できます。

明示的なマッピングでインデックスを作成する

新しいインデックスを明示的なマッピングで作成するには、インデックスを作成するAPIを使用できます。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "age": {
  6. "type": "integer"
  7. },
  8. "email": {
  9. "type": "keyword"
  10. },
  11. "name": {
  12. "type": "text"
  13. }
  14. }
  15. },
  16. )
  17. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. age: {
  7. type: 'integer'
  8. },
  9. email: {
  10. type: 'keyword'
  11. },
  12. name: {
  13. type: 'text'
  14. }
  15. }
  16. }
  17. }
  18. )
  19. puts response

Go

  1. res, err := es.Indices.Create(
  2. "my-index-000001",
  3. es.Indices.Create.WithBody(strings.NewReader(`{
  4. "mappings": {
  5. "properties": {
  6. "age": {
  7. "type": "integer"
  8. },
  9. "email": {
  10. "type": "keyword"
  11. },
  12. "name": {
  13. "type": "text"
  14. }
  15. }
  16. }
  17. }`)),
  18. )
  19. fmt.Println(res, err)

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. age: {
  6. type: "integer",
  7. },
  8. email: {
  9. type: "keyword",
  10. },
  11. name: {
  12. type: "text",
  13. },
  14. },
  15. },
  16. });
  17. console.log(response);

コンソール

  1. PUT /my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "age": { "type": "integer" },
  6. "email": { "type": "keyword" },
  7. "name": { "type": "text" }
  8. }
  9. }
  10. }
ageを作成し、integerフィールドを作成します
emailを作成し、keywordフィールドを作成します
nameを作成し、textフィールドを作成します

既存のマッピングにフィールドを追加する

既存のインデックスに1つ以上の新しいフィールドを追加するには、マッピングを更新するAPIを使用できます。

次の例では、employee-idkeywordフィールドをindexのマッピングパラメータ値falseで追加します。これは、employee-idフィールドの値が保存されるが、インデックスされず、検索可能ではないことを意味します。

Python

  1. resp = client.indices.put_mapping(
  2. index="my-index-000001",
  3. properties={
  4. "employee-id": {
  5. "type": "keyword",
  6. "index": False
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.indices.put_mapping(
  2. index: 'my-index-000001',
  3. body: {
  4. properties: {
  5. "employee-id": {
  6. type: 'keyword',
  7. index: false
  8. }
  9. }
  10. }
  11. )
  12. puts response

Go

  1. res, err := es.Indices.PutMapping(
  2. []string{"my-index-000001"},
  3. strings.NewReader(`{
  4. "properties": {
  5. "employee-id": {
  6. "type": "keyword",
  7. "index": false
  8. }
  9. }
  10. }`),
  11. )
  12. fmt.Println(res, err)

Js

  1. const response = await client.indices.putMapping({
  2. index: "my-index-000001",
  3. properties: {
  4. "employee-id": {
  5. type: "keyword",
  6. index: false,
  7. },
  8. },
  9. });
  10. console.log(response);

コンソール

  1. PUT /my-index-000001/_mapping
  2. {
  3. "properties": {
  4. "employee-id": {
  5. "type": "keyword",
  6. "index": false
  7. }
  8. }
  9. }

フィールドのマッピングを更新する

サポートされているマッピングパラメータを除いて、既存のフィールドのマッピングやフィールドタイプを変更することはできません。既存のフィールドを変更すると、すでにインデックスされたデータが無効になる可能性があります。

データストリームのバックインデックスのフィールドのマッピングを変更する必要がある場合は、データストリームのマッピングと設定を変更するを参照してください。

他のインデックスのフィールドのマッピングを変更する必要がある場合は、正しいマッピングで新しいインデックスを作成し、再インデックスしてそのインデックスにデータを移動します。

フィールドの名前を変更すると、古いフィールド名の下で既にインデックスされたデータが無効になります。代わりに、aliasフィールドを追加して、代替のフィールド名を作成します。

インデックスのマッピングを表示する

既存のインデックスのマッピングを表示するには、マッピングを取得するAPIを使用できます。

Python

  1. resp = client.indices.get_mapping(
  2. index="my-index-000001",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.get_mapping(
  2. index: 'my-index-000001'
  3. )
  4. puts response

Go

  1. res, err := es.Indices.GetMapping(es.Indices.GetMapping.WithIndex("my-index-000001"))
  2. fmt.Println(res, err)

Js

  1. const response = await client.indices.getMapping({
  2. index: "my-index-000001",
  3. });
  4. console.log(response);

コンソール

  1. GET /my-index-000001/_mapping

APIは次の応答を返します:

コンソール-結果

  1. {
  2. "my-index-000001" : {
  3. "mappings" : {
  4. "properties" : {
  5. "age" : {
  6. "type" : "integer"
  7. },
  8. "email" : {
  9. "type" : "keyword"
  10. },
  11. "employee-id" : {
  12. "type" : "keyword",
  13. "index" : false
  14. },
  15. "name" : {
  16. "type" : "text"
  17. }
  18. }
  19. }
  20. }
  21. }

特定のフィールドのマッピングを表示する

1つ以上の特定のフィールドのマッピングのみを表示したい場合は、フィールドマッピングを取得するAPIを使用できます。

これは、インデックスの完全なマッピングが必要ない場合や、インデックスに多数のフィールドが含まれている場合に便利です。

次のリクエストは、employee-idフィールドのマッピングを取得します。

Python

  1. resp = client.indices.get_field_mapping(
  2. index="my-index-000001",
  3. fields="employee-id",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_field_mapping(
  2. index: 'my-index-000001',
  3. fields: 'employee-id'
  4. )
  5. puts response

Go

  1. res, err := es.Indices.GetMapping(es.Indices.GetMapping.WithIndex("my-index-000001"))
  2. fmt.Println(res, err)

Js

  1. const response = await client.indices.getFieldMapping({
  2. index: "my-index-000001",
  3. fields: "employee-id",
  4. });
  5. console.log(response);

コンソール

  1. GET /my-index-000001/_mapping/field/employee-id

APIは次の応答を返します:

コンソール-結果

  1. {
  2. "my-index-000001" : {
  3. "mappings" : {
  4. "employee-id" : {
  5. "full_name" : "employee-id",
  6. "mapping" : {
  7. "employee-id" : {
  8. "type" : "keyword",
  9. "index" : false
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }