Я пытаюсь инициализировать настройки и сопоставления с помощью сценария оболочки в докере.
#!/bin/sh
until $(curl --output /dev/null --silent --head --fail http://elasticsearch:9200); do
printf '.'
sleep 5
done
for i in {30..0}; do
if curl elasticsearch:9200; then
curl -XPUT 'elasticsearch:9200/x_product/' -H 'Content-Type: application/json' -d '{
"settings": {
"number_of_shards": 1,
"analysis": {
"filter": {
"ngram_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 3
}
},
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "my_tokenizer",
"filter": ["lowercase", "ngram_filter"]
}
}
}
},
"mappings" : {
"product": {
"name": {
"type": "string",
"include_in_all": true,
"term_vector": "yes",
"index_analyzer": "ngram_analyzer",
"search_analyzer": "standard"
},
"description_value": {
"type": "string",
"include_in_all": true,
"term_vector": "yes",
"index_analyzer": "ngram_analyzer",
"search_analyzer": "standard"
},
"barcode_value": {
"type": "string",
"include_in_all": true,
"term_vector": "yes",
"index_analyzer": "ngram_analyzer",
"search_analyzer": "standard"
},
"searchword_content": {
"type": "string",
"include_in_all": true,
"term_vector": "yes",
"index_analyzer": "ngram_analyzer",
"search_analyzer": "standard"
},
"discount": {
"type": "integer"
},
"datetime": {
"type": "date",
"format": "epoch_millis"
}
}
}
}';
break;
fi
sleep 2
done
Однако этот синтаксис дает мне ошибку:
{"error":{"root_cause":[{"type":"parse_exception","reason":"Failed to parse content to map"}],"type":"parse_exception","reason":"Failed to parse content to map","caused_by":{"type":"json_parse_exception","reason":"Unexpected character ('}' (code 125)): was expecting double-quote to start field name\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@770de4a9; line: 19, column: 22]"}},"status":400}
Что не так с моим синтаксисом?
Обновлено: 1. Обновите мое изменение синтаксиса «нижний регистр на «нижний регистр», а также тип на «тип», однако получил еще одну ошибку. 2. Убрать лишнюю запятую в анализаторе
Спасибо, я обновил свой синтаксис, но по-прежнему получил другую ошибку: {"error":{"root_cause":[{"type":"parse_exception","reason":"Не удалось проанализировать содержимое для сопоставления"}] ,"type":"parse_exception","reason":"Не удалось проанализировать содержимое для сопоставления","caused_by":{"type":"json_parse_exception","reason":"Неожиданный символ ('}' (код 125)): ожидалось, что имя поля начнется с двойной кавычки\n в [Источник: org.elasticsearch.transport.netty4.ByteBufStreamInput@770de4a9; строка: 19, столбец: 22]"}},"status":400 }
вставьте свой json в jsonlint.com и нажмите «Подтвердить JSON» и исправьте полученную ошибку с красной линией.





Помимо проблемы с синтаксисом, есть также проблема с полями json для эластичного поиска, поэтому я меняю некоторые поля и значения, а также разделяю настройки и сопоставления, чтобы их было легче читать.
curl -XPUT 'elasticsearch:9200/x_product/_settings' -H 'Content-Type: application/json' -d '{
"analysis": {
"filter": {
"ngram_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 3
}
},
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "ngram_filter"]
}
}
}
}';
curl -XPUT 'elasticsearch:9200/x_product/_mapping/product' -H 'Content-Type: application/json' -d '{
"properties": {
"name": {
"type": "text",
"term_vector": "yes",
"analyzer": "ngram_analyzer",
"search_analyzer": "standard"
},
"description_value": {
"type": "text",
"term_vector": "yes",
"analyzer": "ngram_analyzer",
"search_analyzer": "standard"
},
"barcode_value": {
"type": "text",
"term_vector": "yes",
"analyzer": "ngram_analyzer",
"search_analyzer": "standard"
},
"searchword_content": {
"type": "text",
"term_vector": "yes",
"analyzer": "ngram_analyzer",
"search_analyzer": "standard"
},
"discount": {
"type": "integer"
},
"datetime": {
"type": "date",
"format": "epoch_millis"
}
}
}';
"filter": ["lowercase, "ngram_filter"]ты забыл"в конце"lowercase. такжеtype:должно быть"type":