25

我有一个文档,其中包含许多我从未查询过的字段,因此我想关闭这些字段的索引以节省资源。我相信我需要禁用该_all字段,但是如何指定索引哪些字段呢?

4

6 回答 6

37

默认情况下,所有字段也都在_all特殊字段中进行索引,它提供了开箱即用的所谓的包罗万象的功能。但是,您可以通过以下选项为映射中的每个字段指定是否要将其添加到 _all 字段include_in_all

"person" : {
    "properties" : {
        "name" : {
            "type" : "string", "store" : "yes", "include_in_all" : false
        }
    }
}

上面的示例禁用了 name 字段的默认行为,它不会是 _all 字段的一部分。

否则,如果您根本不需要特定类型的 _all 字段,您可以像这样禁用它,再次在您的映射中:

"person" : {
    "_all" : {"enabled" : false},
    "properties" : {
        "name" : {
            "type" : "string", "store" : "yes"
        }
    }
}

当您禁用它时,您的字段仍将被单独索引,但您不会拥有 _all 提供的包罗万象的功能。然后,您将需要查询您的特定字段,而不是依赖 _all 特殊字段,就是这样。实际上,当您查询并且未指定字段时,elasticsearch 会在后台查询 _all 字段,除非您覆盖默认字段进行查询。

于 2012-11-29T13:47:46.690 回答
16

每个字符串字段index在映射配置中都有参数,默认为 analyzed. 这意味着除了 _all 字段之外,每个字段都被单独索引。

对于_all 字段,参考文献中说:

默认情况下,它已启用,并且所有字段都包含在其中以方便使用。

因此,要完全禁用您必须指定的字段的索引(如果启用了 _all 字段):

    "mappings": {
        "your_mapping": {
            "properties": {
                "field_not_to_index": {
                    "type": "string",
                    "include_in_all": false,
                    "index": "no"
                }
            }
        }
    }

对于应该查询是否将它们包含在 _all 字段中的字段(使用"index": "no"以节省资源),如果您通过 _all 字段进行查询,或者如果您对这些字段进行查询,则仅使用index具有任何正值(analyzednot_analyzed)的参数并禁用_all 字段以节省资源。

于 2014-09-19T14:51:06.273 回答
3

以下是了解弹性搜索中索引设置的重要文档页面 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html

对于您的问题,理想情况下,您应该在字段属性中将“索引”标志设置为 no。

于 2015-02-16T18:00:30.227 回答
2

您可以利用enabled字段来禁用特定字段或整个映射。 弹性搜索文档

禁用字段映射(即session_data字段)

{
  "mappings": {
    "_doc": {
      "properties": {
        "session_data": { 
          "enabled": false
        }
      }
    }
  }
}

禁用整个映射

{
  "mappings": {
    "_doc": { 
      "enabled": false
    }
  }
}
于 2018-05-23T04:56:28.460 回答
1

将动态索引和 _all 索引设置为 false。在映射中指定必填字段。 https://www.elastic.co/guide/en/elasticsearch/guide/current/dynamic-mapping.html

{
   "mappings":{
      "candidates":{
         "_all":{
            "enabled":false
         },
          "dynamic": "false", 
         "properties":{
            "tags":{
               "type":"text"
            },
            "derivedAttributes":{
               "properties":{
                "city":{
                     "type":"text"
                  },
                  "zip5":{
                     "type":"keyword"
                  }
               }
            }
         }
      }
   }
}
于 2017-06-08T09:44:15.410 回答
0

_all 自 6.0 起已被弃用。下面使用

"mappings": {
    "dynamic":"false",
    "properties": {
    "field_to_index":{"index": true, "type": "text"}
  }

根据 es 文档

将 dynamic 设置为 false 根本不会改变 _source 字段的内容。_source 仍将包含您索引的整个 JSON 文档。但是,任何未知字段都不会添加到映射中并且不可搜索。

于 2021-06-14T13:12:42.467 回答