compression
имеет тип object
, и вы пытаетесь передать значение string
, которое вы не можете напрямую передать. И ниже сообщение об ошибке объясняет это правильно.
объектное сопоставление для [сжатия] пыталось проанализировать поле [сжатие] как
объект, но нашел конкретное значение
Тип объекта может иметь несколько sub-fields
, которые обозначены .
, и вы можете передать отдельное значение этим подполям. Так что в вашем случае вы можете передать значение compression.level
.
Пожалуйста, обратитесь к официальному документу ES для более подробного объяснения и примеров. https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html
Похоже, что вы используете динамическое отображение, в этом случае, когдаasticsearch видит имя поля с .
, тогда, если есть соответствующее поле с тем же именем, но без .
, то оно автоматически преобразует его в object
типа, что происходит в вашем случае.
Дайте мне знать, что вам нужно, если вам нужен ключ для вашего значения none
, тогда вам нужно создать такой документ, как:
{
"compression.stategy" : "none", // notice its a another sub-field.
"compression.level" : "0"
}
И вы можете проверить все подполя, нажав _mapping
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-mapping.html
Согласно вашему пониманию (если вы используете динамическое отображение), оно немного отличается, ES сначала увидит "compression" : "none"
, затем попытается сопоставить его с текстовым полем, но затем увидит другое поле compression.level
и как он использует .
в имени поля, а compression
уже присутствует, поэтому начинайте обрабатывать compression
как тип объекта.