指定在ElasticSearch中索引哪些字段

Mic*_*ael 19 elasticsearch

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

jav*_*nna 31

默认情况下,所有字段都在_all特殊字段中编入索引,这提供了开箱即用的所谓catchall功能.但是,您可以通过以下include_in_all选项为映射中的每个字段指定是否要将其添加到_all字段:

"person" : {
    "properties" : {
        "name" : {
            "type" : "string", "store" : "yes", "include_in_all" : false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的示例禁用了name字段的默认行为,该字段不属于_all字段.

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

"person" : {
    "_all" : {"enabled" : false},
    "properties" : {
        "name" : {
            "type" : "string", "store" : "yes"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当您禁用它时,您的字段仍将单独编制索引,但您将无法获得_all提供的捕获功能.然后,您需要查询特定字段,而不是依赖_all特殊字段,就是这样.实际上,当您查询并且未指定字段时,elasticsearch将查询引擎盖下的_all字段,除非您覆盖要查询的默认字段.

  • 好吧,这不仅仅是改变索引大小......它改变了数据索引的方式.如果您不分析字段,它将包含单个标记.不使用任何标记器或标记过滤器.如果它包含一个句子(带有空格等),为了匹配它,你需要查询整个确切的句子.如果您从不查询字段,只需设置indexed = false. (2认同)

小智 14

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

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

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

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

    "mappings": {
        "your_mapping": {
            "properties": {
                "field_not_to_index": {
                    "type": "string",
                    "include_in_all": false,
                    "index": "no"
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

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