我有一个文档,其中包含许多我从未查询过的字段,因此我希望关闭这些字段的索引以节省资源。我相信我需要disable the _all
field,但是如何指定哪些字段被编入索引呢?
答案 0 :(得分:28)
默认情况下,所有字段都在_all特殊字段中编入索引,这提供了开箱即用的所谓catchall功能。但是,您可以通过include_in_all
选项为映射中的每个字段指定是否要将其添加到_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字段,除非您覆盖要查询的默认字段。
答案 1 :(得分:11)
每个字符串字段在映射配置中都有index
个参数,defaults to analyzed
。这意味着除了_all字段之外,每个字段都被单独编入索引。
对于_all field,参考文献中说:
默认情况下,它已启用,并且所有字段都包含在其中以便于使用。
因此,要完全禁用您必须指定的字段的索引(如果启用了_all字段):
"mappings": {
"your_mapping": {
"properties": {
"field_not_to_index": {
"type": "string",
"include_in_all": false,
"index": "no"
}
}
}
}
对于应查询的字段,如果通过_all字段查询,是否将它们包含在_all字段中("index": "no"
用于保存资源),或者如果仅查询这些字段,请使用{{1具有任何正值(index
或analyzed
)的param并禁用_all字段以节省资源。
答案 2 :(得分:3)
以下是了解弹性搜索中索引设置的重要文档页面 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html
对于您的问题,理想情况下,您应该在字段属性中将“index”标志设置为no。
答案 3 :(得分: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"
}
}
}
}
}
}
}
答案 4 :(得分:1)
您可以使用enabled
字段来禁用特定字段或整个映射。
ElasticSearch Doc
禁用字段映射(即session_data
字段)
{
"mappings": {
"_doc": {
"properties": {
"session_data": {
"enabled": false
}
}
}
}
}
禁用整个映射
{
"mappings": {
"_doc": {
"enabled": false
}
}
}
答案 5 :(得分:0)
_all 自 6.0 起已弃用。下面使用
"mappings": {
"dynamic":"false",
"properties": {
"field_to_index":{"index": true, "type": "text"}
}
根据es文档
将 dynamic 设置为 false 根本不会改变 _source 字段的内容。 _source 仍将包含您编入索引的整个 JSON 文档。但是,任何未知字段都不会添加到映射中,也无法搜索。