当前位置: 首页 > 知识库问答 >
问题:

在elasticsearch中更新默认索引映射

颛孙炜
2023-03-14

我想为我的索引更新elasticsearch中的默认映射。但是所有的文档都指出我们必须为更新映射提供类型。问题是我有很多索引类型,它们是动态创建的,就像新类型的文档出现时一样。所以最好的处理方法是默认映射类型。因为我不必为每个类型定义映射。但现在我无法更新我的索引默认映射。如果可能的话,请告诉我?

共有1个答案

梁巴英
2023-03-14

我使用默认映射如下:

我创建了索引,指定了_default_映射。在本例中,我只有一个字段,但我希望确保它不会被分析(因此我可以跨类型进行分面处理,例如):

curl -XDELETE "http://localhost:9200/test_index"

curl -XPUT "http://localhost:9200/test_index" -d'
{
   "mappings": {
      "_default_": {
         "properties": {
            "title": {
               "type": "string",
               "index": "not_analyzed"
            }
         }
      }
   }
}'

然后我创建了两个文档,每个文档都是不同类型的:

curl -XPUT "http://localhost:9200/test_index/doc_type1/1" -d'
{ "title": "some text" }'

curl -XPUT "http://localhost:9200/test_index/doc_type2/2" -d'
{ "title": "some other text" }'

因此将动态生成每个类型的映射,并且将包括“title”的默认映射。我们可以通过查看映射来看出这一点:

curl -XGET "http://localhost:9200/test_index/_mapping"
...
{
   "test_index": {
      "mappings": {
         "_default_": {
            "properties": {
               "title": {
                  "type": "string",
                  "index": "not_analyzed"
               }
            }
         },
         "doc_type2": {
            "properties": {
               "title": {
                  "type": "string",
                  "index": "not_analyzed"
               }
            }
         },
         "doc_type1": {
            "properties": {
               "title": {
                  "type": "string",
                  "index": "not_analyzed"
               }
            }
         }
      }
   }
}

如果我在title字段上刻面,我将得到我所期望的结果:

curl -XPOST "http://localhost:9200/test_index/_search" -d'
{
    "size": 0, 
    "facets": {
       "title_values": {
          "terms": {
             "field": "title",
             "size": 10
          }
       }
    }
}'
...
{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 0,
      "hits": []
   },
   "facets": {
      "title_values": {
         "_type": "terms",
         "missing": 0,
         "total": 2,
         "other": 0,
         "terms": [
            {
               "term": "some text",
               "count": 1
            },
            {
               "term": "some other text",
               "count": 1
            }
         ]
      }
   }
}

下面是我使用的代码

这回答了你的问题吗?

编辑:以下是如何更新现有索引的_default_映射:

curl -XPUT "http://localhost:9200/test_index/_default_/_mapping" -d'
{
   "_default_": {
      "properties": {
         "title": {
            "type": "string",
            "index": "not_analyzed"
         },
         "name": {
            "type": "string",
            "index": "not_analyzed"
         }
      }
   }
}'

(顺便说一下,我使用了Elasticsearch 1.3.4版本来回答这个问题。)

 类似资料:
  • 我对弹性搜索一无所知。所以,如果这是一个愚蠢的问题,请原谅我,我的问题可能已经在其他地方得到了回答,但我找不到。我想使用弹性搜索作为我的网络中PDF和docx的搜索引擎。我使用fscrawler将PDF文件吸收到弹性搜索中。因为我要摄取的文档是几种语言的,所以我想使用n-graming进行词干分析。为此,我想像这样更新我的映射 现在我收到了这个错误信息 {“error”:{“root_cause”

  • 问题内容: 根据文档,我尝试按以下方式更新副本数 这将正确更改现有节点的副本数。但是,当logstash在第二天创建新索引时,number_of_replicas设置为旧值。 有没有一种方法可以永久更改此设置的默认值,而无需更新群集中的所有文件并重新启动服务? 我也尝试过 无济于事。 问题答案: 是的,您可以使用索引模板。索引模板是为集群中创建的新索引设置默认设置(包括映射)的好方法。 索引模板

  • 根据文档,我尝试过如下更新副本的数量 这将正确更改现有节点的副本计数。但是,当logstash在第二天创建新索引时,复制副本的数量设置为旧值。 是否有一种方法可以永久更改此设置的默认值,而无需更新所有的集群中的文件并重新启动服务? 我也试过了 没用。

  • 问题内容: 我正在尝试了解如何在Elasticsearch中更新索引文档。我不明白它是如何工作的?什么是该API指的是在做什么?假设您有一个带有嵌套文档的文档,您需要做什么来更新它? 删除文档然后索引“已更新”版本与普通更新之间有什么区别? 问题答案: 更新请求从Elasticsearch检索源,对其进行修改并将其索引回Elasticsearch。如果您已经具有使用更新的文档副本,则毫无意义。仅索

  • 问题内容: 我在Elasticsearch上遇到问题,我不希望对索引项进行分析。但是elasticsearch有一些默认设置,可以在空间上标记它。因此,我的方面查询未返回我想要的结果。 我读到索引类型的属性应该工作。但是问题是我事先不知道我的文档结构。我会在不知道表结构的情况下将随机MySQL数据库索引到elasticsearch。 我如何设置elasticsearch,使其默认情况下会一直使用,

  • ES5.5文档给出了一个大容量索引的明确示例: 但它也说 endpoint为/_bulk、/{index}/_bulk和{index}/{type}/_bulk。当提供了索引或索引/类型时,默认情况下将在未显式提供它们的批量项上使用它们。 但我不能让这一切奏效。 > 我尝试了/myindex/bulkendpoint,但元数据中没有指定类型。 我在指定了“_type”:“_default_”的情况