Ошибка при добавлении настроек и сопоставлений через curl в скрипте оболочки для эластичного поиска

Я пытаюсь инициализировать настройки и сопоставления с помощью сценария оболочки в докере.

#!/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. Убрать лишнюю запятую в анализаторе

"filter": ["lowercase, "ngram_filter"] ты забыл " в конце "lowercase. также type: должно быть "type":
ymonad 01.03.2019 03:30

Спасибо, я обновил свой синтаксис, но по-прежнему получил другую ошибку: {"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@770de4‌​a9; строка: 19, столбец: 22]"}},"status":400 }

undefined 01.03.2019 03:40

вставьте свой json в jsonlint.com и нажмите «Подтвердить JSON» и исправьте полученную ошибку с красной линией.

ymonad 01.03.2019 03:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
207
1

Ответы 1

Помимо проблемы с синтаксисом, есть также проблема с полями 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"
                }
            }
        }';

Другие вопросы по теме