簡體   English   中英

指定在 ElasticSearch 中索引哪些字段

[英]Specify which fields are indexed in ElasticSearch

我有一個文檔,其中包含許多我從未查詢過的字段,因此我想關閉這些字段的索引以節省資源。 我相信我需要禁用_all字段,但是如何指定索引哪些字段呢?

默認情況下,所有字段都在_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字段,除非您覆蓋要查詢的默認字段。

每個字符串字段在映射配置中都有index參數, 默認為 analyzed 這意味着除了_all字段之外,每個字段都是單獨索引的。

對於_all字段 ,參考文獻中說:

默認情況下,它已啟用,並且所有字段都包含在其中以便於使用。

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

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

對於應查詢的字段是否包含在_all字段中(如果您通過_all字段查詢,則使用"index": "no"來保存資源),或者如果您在這些字段上查詢,則僅使用index參數正值(已analyzed或未not_analyzed )並禁用_all字段以節省資源。

以下是了解彈性搜索中索引設置的重要文檔頁面http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html

對於您的問題,理想情況下,您應該在字段屬性中將“index”標志設置為no。

將動態索引和_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"
                  }
               }
            }
         }
      }
   }
}

您可以使用enabled字段來禁用特定字段或整個映射。 ElasticSearch Doc

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

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

禁用整個映射

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

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

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

根據 es 文檔

將 dynamic 設置為 false 根本不會改變 _source 字段的內容。 _source 仍將包含您編入索引的整個 JSON 文檔。 但是,任何未知字段都不會添加到映射中,也無法搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM