我正在尝试仅对特定索引禁用动态映射创建,而不是对所有索引禁用。出于某种原因,我无法将默认映射设置为“dynamic”:“false”。所以,这里有两个选项,我可以看到:
第一个选项只能接受值:true、false和strict。因此,无法指定特定索引的子集(就像我们使用属性“action.auto_create_index”按模式所做的那样)https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#index-(创造)。
第二种选择根本不起作用。我已经创建了索引
POST http://localhost:9200/test_idx/
{
"settings" : {
"mapper" : {
"dynamic" : false
}
},
"mappings" : {
"test_type" : {
"properties" : {
"field1" : {
"type" : "string"
}
}
}
}
}
然后检查索引设置:
GET http://localhost:9200/test_idx/_settings
{
"test_idx" : {
"settings" : {
"index" : {
"mapper" : {
"dynamic" : "false"
},
"creation_date" : "1445440252221",
"number_of_shards" : "1",
"number_of_replicas" : "0",
"version" : {
"created" : "1050299"
},
"uuid" : "5QSYSYoORNqCXtdYn51XfA"
}
}
}
}
和映射:
GET http://localhost:9200/test_idx/_mapping
{
"test_idx" : {
"mappings" : {
"test_type" : {
"properties" : {
"field1" : {
"type" : "string"
}
}
}
}
}
}
到目前为止还不错,让我们用未声明的字段索引文档:
POST http://localhost:9200/test_idx/test_type/1
{
"field1" : "it's ok, field must be in mapping and in source",
"somefield" : "but this field must be in source only, not in mapping"
}
然后我再次检查了映射:
GET http://localhost:9200/test_idx/_mapping
{
"test_idx" : {
"mappings" : {
"test_type" : {
"properties" : {
"field1" : {
"type" : "string"
},
"somefield" : {
"type" : "string"
}
}
}
}
}
}
如您所见,无论索引设置如何,映射都是扩展的“动态”: false。我还试图完全按照文档中的描述创建索引
PUT http://localhost:9200/test_idx
{
"index.mapper.dynamic": false
}
但他们也有同样的行为。
也许我错过了什么?
非常感谢!
答案在文档(7x.):https://www.elastic.co/guide/en/elasticsearch/reference/7.x/dynamic.html
动态设置控制是否可以动态添加新字段。它接受三种设置:
符合事实的
新检测到的字段将添加到映射中。(默认)
假
新检测到的字段将被忽略。这些字段不会被索引,因此不可搜索,但仍会出现在返回点击的_source字段中。这些字段不会添加到映射中,必须显式添加新字段。
严格的
如果检测到新字段,将引发异常并拒绝文档。新字段必须显式添加到映射中。
PUT my_index
{
"mappings": {
"dynamic": "strict",
"properties": {
"user": {
"properties": {
"name": {
"type": "text"
},
"social_networks": {
"dynamic": true,
"properties": {}
}
}
}
}
}
}
你必须知道下面的部分仅仅意味着ES不能动态地创建一个类型。
"mapper" : {
"dynamic" : false
}
您应该这样配置ES:
PUT http://localhost:9200/test_idx/_mapping/test_type
{
"dynamic":"strict"
}
那么,如果不进行任何映射,就无法为其他字段编制索引,并且会出现如下错误:
mapping set to strict, dynamic introduction of [hatae] within [data] is not allowed
如果要存储数据,但使字段无法索引,可以采用如下设置:
PUT http://localhost:9200/test_idx/_mapping/test_type
{
"dynamic":false
}
希望这些能帮助有同样问题的人:)。
就快到了:需要将值设置为严格
。正确的用法如下:
PUT /test_idx
{
"mappings": {
"test_type": {
"dynamic":"strict",
"properties": {
"field1": {
"type": "string"
}
}
}
}
}
再进一步,如果你想禁止创建新类型,而不仅仅是索引中的字段,请使用以下命令:
PUT /test_idx
{
"mappings": {
"_default_": {
"dynamic": "strict"
},
"test_type": {
"properties": {
"field1": {
"type": "string"
}
}
}
}
}
没有\u默认值
模板:
PUT /test_idx
{
"settings": {
"index.mapper.dynamic": false
},
"mappings": {
"test_type": {
"dynamic": "strict",
"properties": {
"field1": {
"type": "string"
}
}
}
}
}
问题内容: 我正在尝试仅针对特定索引而不是对所有索引禁用动态映射创建。由于某种原因,我无法将 默认 映射与’dynamic’:’false’ 放在一起。因此,在这里我看到了两个选项: 指定属性 “index.mapper.dynamic” 文件 elasticsearch.yml 。 将 “ index.mapper.dynamic” 放在索引创建时,如此处https://www.elastic.
问题所在 我是elasticsearch的新手,我想了解动态映射和重新索引文档之间的关系。 根据我的实验,当动态映射打开时,文档的重新索引是自动完成的。这意味着如果向文档中添加新字段,它将自动被索引。 TEST1-带映射的索引 TEST2-没有映射的索引
问题内容: 我正在努力完成索引创建这一简单任务,目标是使用分析器和字段映射创建索引。当我使用分析器创建索引时,我可以通过分析api调用与分析器通信,但是当我添加映射信息时,创建索引调用失败,并显示“字段[$ field]]找不到Analyzer [analyzer1]”,我创建了一个脚本来显示问题: 问题答案: 我相信您的问题是这些设置需要嵌套在JSON的一个节点内,而不是您所拥有的嵌套在一个节点
问题内容: 也许我缺少一些简单的东西,但仍然无法弄清楚以下内容: 从ES 6.x开始,该字段已弃用,建议使用说明(https://www.elastic.co/guide/en/elasticsearch/reference/current/copy- to.html )。 但是,给我的印象是,您需要显式指定要复制到自定义字段的字段。但是,如果我使用动态映射,则我不事先知道字段,因此不能使用? 我
我正在尝试禁用弹性搜索索引的动态映射器。下面是我通过Kibana控制台进行测试的一系列查询。 我想添加“index.mapper.dynamic”应该会在索引级别禁用它,对吧? 但是最终的GET返回这个文档,注意是我添加到posted文档中的一个字段,只是为了测试--它不应该在结果中。我还检查了映射,它被动态添加到映射中。 我的创建索引查询有什么问题?? 搜索查询
问题内容: 我有一个要在elasticSearch上建立索引的文档,该文档包含一些我事先不知道的动态键,例如下面的示例中的“ spanish”或“ french” 我使用的是DSL elastic4s为了使我的映射(通过在DSL的createIndex),但我找不到如何创建,使用这个库的基础上,“匹配”选项动态映射(如建议在这里),在为了为路径content.title下存储的每种语言指定不同的分