У меня есть документ с несколькими полями, которые я никогда не запрашиваю, поэтому я бы хотел включить индексирование этих полей для экономии ресурсов. Я считаю, что мне нужно отключить поле _all
, но как указать, какие поля индексируются?
Укажите, какие поля индексируются в ElasticSearch
Ответ 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 для экономии ресурсов.
Ответ 3
Ниже приведена важная страница документа, чтобы понять настройки индекса в эластичном поиске http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html
Для вашей проблемы в идеале вы должны установить флаг "index" в no в свойствах поля.
Ответ 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"
}
}
}
}
}
}
}