Укажите, какие поля индексируются в ElasticSearch

У меня есть документ с несколькими полями, которые я никогда не запрашиваю, поэтому я бы хотел включить индексирование этих полей для экономии ресурсов. Я считаю, что мне нужно отключить поле _all, но как указать, какие поля индексируются?

Ответ 1

По умолчанию все поля индексируются в специальном поле _ all, которое предоставляет так называемую функцию catchall из коробки. Тем не менее, вы можете указать для каждого поля в своем сопоставлении, хотите ли вы добавить его в поле _all или нет, с помощью опции include_in_all:

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

В приведенном выше примере отключается поведение по умолчанию для поля имени, которое не будет частью поля _all.

В противном случае, если вам вообще не нужно поле _all для определенного типа, вы можете отключить его так: снова в вашем сопоставлении:

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

Когда вы отключите его, ваши поля будут по-прежнему индексироваться отдельно, но у вас не будет функции catchall, которую предоставляет _all. Затем вам нужно будет запросить свои конкретные поля вместо того, чтобы полагаться на специальное поле _all. Фактически, когда вы запрашиваете и не указываете поле, elasticsearch запрашивает поле _all под капотом, если вы не отмените поле по умолчанию для запроса.

Ответ 2

Каждое строковое поле имеет index param в конфигурации сопоставления, которое по умолчанию соответствует analyzed. Это означает, что помимо поля _all каждое поле индексируется только.

И для _ всего поля в ссылке говорится:

По умолчанию он включен и все поля включены в него для удобства использования.

Итак, чтобы полностью отключить индексирование для поля, которое вы должны указать (если поле _all включено):

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

Для полей, которые должны быть запрошены, включить ли их в поле _all (с помощью "index": "no" для сохранения ресурсов), если вы запрашиваете через поле _all, или если вы запрашиваете эти поля, используйте только параметр index с любое положительное значение (analyzed или not_analyzed) и отключить поле _all для экономии ресурсов.

Ответ 4

Установите динамический индекс и индекс _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"
                  }
               }
            }
         }
      }
   }
}