首页 > 解决方案 > 有没有办法在现有数据上启用 _source?

问题描述

我创建了一个没有 _source 字段的索引(考虑到内存)。我想在现有数据上启用此字段,有办法吗?

例如:
我将创建 dummy-index :

PUT /dummy-index?pretty
{
  "mappings": {
    "_doc": {
      "_source": {
        "enabled": false
      }
    }
  }
}

我将添加下一个文档:

PUT /dummy-index/_doc/1?pretty
{
  "name": "CoderIl"
}

当我在没有名称字段的情况下进行搜索时,我只会得到命中的元数据
{
   "_index" : "dummy-index",
   "_type" : "_doc",
   "_id" : "1",
   "_score" : 1.0
}

问题是否可以更改_soruce为启用,当我再次搜索时,我会得到丢失的数据(在本例中为“名称”字段) -

{
   "_index" : "dummy-index",
   "_type" : "_doc",
   "_id" : "1",
   "_score" : 1.0
   "_source" : {
        "name" :CoderIl"
   }
}

标签: elasticsearchindexing

解决方案


来自同一个官方文档的字段控件上的存储选项

默认情况下,对字段值进行索引以使其可搜索,但不会存储它们。这意味着可以查询该字段,但无法检索原始字段值。

通常这无关紧要。字段值已经是默认存储的 _source 字段的一部分。如果您只想检索单个字段或几个字段的值,而不是整个 _source,则可以通过源过滤来实现。

正如文档中提到的,默认情况下它是禁用的,如果你想节省空间,你可以在特定的字段上启用它,并且需要重新索引数据

编辑: 索引选项控制(默认启用)字段是否被索引(这是在字段上搜索所必需的)和store选项控制它是否被存储,如果你想获得非分析值,即使用什么您在索引请求中发送给 ES,该请求基于字段类型经过文本分析和部分index option,请参阅SO 问题以获取更多信息。


推荐阅读