web-dev-qa-db-ja.com

config.exsにinclude_type_nameを置く場所

Elixir config.exsファイルからElasticsearch 7.xインデックスを作成したいです。

config :app_core, App.Tools.ElasticsearchCluster,
  url: System.get_env("ELASTIC_Host"),
  # username: "username",
  # password: "password",
  api: Elasticsearch.API.HTTP,
  json_library: Poison,
  indexes: %{
    indie: %{
      settings: "priv/elasticsearch/indies.json",
      store: App.Tools.ElasticSearch.Indie.Store,
      sources: [App.Data.Schema.Indie],
      bulk_page_size: 5000,
      bulk_wait_interval: 15_000
    }
  }
 _

NS priv/elasticsearch/indies.jsonは始まります

{
  "mappings": {
     "_doc":    {
      "properties": {
        "category" : {
          "type": "nested",
          "properties" : {
 _

ただし、インデックスを作成しようとすると、エラーが発生します

"The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true."
 _

どなたでもこの問題を解決する方法を知っていますか。

Assael Azranからのリクエストに応じて、これが完全なインディースです。

{
  "mappings": {
     "_doc": {
      "properties": {
        "category" : {
          "type": "nested",
          "properties" : {
            "all_parents" : {
              "type" : "keyword"
            },
            "direct_parent" : {
              "type" : "keyword"
            },
            "paths" : {
              "type" : "keyword"
            }
          }
        },
        "slug": {
          "type": "keyword"
        },
        "parent_id": {
          "type": "integer",
          "index": false
        },
        "images": {
          "type": "nested",
          "properties": {
            "indie_url": {
              "type": "text",
              "index": false
            }
          }
        },
        "tenant": {
          "type": "keyword"
        },
        "suggest_keywords": {
          "type": "completion",
          "contexts": [
            {
                "name": "tenant",
                "type": "category"
            }
          ]
        },
        "name": {
          "type": "text"
        },
        "description": {
          "type": "text",
          "index": false
        },
        "updated_at": {
          "type": "date"
        },
        "string_facet": {
          "type": "nested",
          "properties": {
            "id": {
              "type": "keyword"
            },
            "value": {
              "type": "keyword"
            }
          }
        },
        "number_facet": {
          "type": "nested",
          "properties": {
            "id": {
              "type": "keyword"
            },
            "value": {
              "type": "double"
            }
          }
        }
      }
    }
  }
}
 _
9
Paul Rousseau

マッピング型はバージョン7.xではサポートされなくなりました。

Elasticsearch 7.xリクエスト内のタイプを指定することは推奨されていません。たとえば、文書を索引付けするには、ドキュメントタイプが必要ありません。新規インデックスAPIは、明示IDの場合は{index}/_ doc/{ID}に属し、自動生成されたIDの場合はPOST {index}/_ doc。 7.0では、_docはパスの恒久的な部分であり、文書タイプではなくエンドポイント名を表します。インデックス作成、インデックステンプレート、およびマッピングAPIのINCLUDE_TYPE_NAMEパラメーターは、デフォルトはfalseになります。パラメータをすべて設定すると、廃止予定の警告が発生します。 デフォルトマッピングタイプが削除されました。

私の提案はあなたのマッピングから_docタイプを削除することです。

{"mappings":{"property":{"category":{"type": "nested"、 "properties":{"

ここから

[〜#〜]更新[〜#〜]

弾性7.2.0でテスト済み

次のマッピングを作成しようとしました。

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "category": {
          "type": "nested",
          "properties": {
            "all_parents": {
              "type": "keyword"
            },
            "direct_parent": {
              "type": "keyword"
            },
            "paths": {
              "type": "keyword"
            }
          }
        },
        "slug": {
          "type": "keyword"
        },
        "parent_id": {
          "type": "integer",
          "index": false
        },
        "images": {
          "type": "nested",
          "properties": {
            "indie_url": {
              "type": "text",
              "index": false
            }
          }
        },
        "tenant": {
          "type": "keyword"
        },
        "suggest_keywords": {
          "type": "completion",
          "contexts": [
            {
              "name": "tenant",
              "type": "category"
            }
          ]
        },
        "name": {
          "type": "text"
        },
        "description": {
          "type": "text",
          "index": false
        },
        "updated_at": {
          "type": "date"
        },
        "string_facet": {
          "type": "nested",
          "properties": {
            "id": {
              "type": "keyword"
            },
            "value": {
              "type": "keyword"
            }
          }
        },
        "number_facet": {
          "type": "nested",
          "properties": {
            "id": {
              "type": "keyword"
            },
            "value": {
              "type": "double"
            }
          }
        }
      }
    }
  }
}

そして予想されるように私はこのエラーを得る:

{
"error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true."
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true."
  },
  "status": 400
}

マッピングから_docを削除すると:

PUT my_index
{
  "mappings": {
      "properties": {
        "category": {
          "type": "nested",
          "properties": {
            "all_parents": {
              "type": "keyword"
            },
            "direct_parent": {
              "type": "keyword"
            },
            "paths": {
              "type": "keyword"
            }
          }
        },
        "slug": {
          "type": "keyword"
        },
        "parent_id": {
          "type": "integer",
          "index": false
        },
        "images": {
          "type": "nested",
          "properties": {
            "indie_url": {
              "type": "text",
              "index": false
            }
          }
        },
        "tenant": {
          "type": "keyword"
        },
        "suggest_keywords": {
          "type": "completion",
          "contexts": [
            {
              "name": "tenant",
              "type": "category"
            }
          ]
        },
        "name": {
          "type": "text"
        },
        "description": {
          "type": "text",
          "index": false
        },
        "updated_at": {
          "type": "date"
        },
        "string_facet": {
          "type": "nested",
          "properties": {
            "id": {
              "type": "keyword"
            },
            "value": {
              "type": "keyword"
            }
          }
        },
        "number_facet": {
          "type": "nested",
          "properties": {
            "id": {
              "type": "keyword"
            },
            "value": {
              "type": "double"
            }
          }
        }
      }
    }
}

私はこれを入手します

{

"acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my_index"
}
2
Assael Azran