Elasticsearch всегда возвращает "тип отображения отсутствует"
Я следую приведенным здесь советам, чтобы найти частичные слова с elasticsearch:
ElasticSearch n-gram tokenfilter не находит частичные слова
Я создал простой bash script, который пытается запустить версию этого:
curl -XDELETE 10.160.86.134:9200/products
curl -XPOST 10.160.86.134:9200/products -d '{
"index": {
"number_of_shards": 1,
"analysis": {
"filter": {
"mynGram" : {"type": "nGram", "min_gram": 2, "max_gram": 10}
},
"analyzer": {
"a1" : {
"type":"custom",
"tokenizer": "standard",
"filter": ["lowercase", "mynGram"]
}
}
}
}
}
}'
curl -XPUT 10.160.86.134:9200/products/_mapping -d '{
"product" : {
"index_analyzer" : "a1",
"search_analyzer" : "standard",
"properties" : {
"product_description": {"type":"string"},
"product_name": {"type":"string"}
}
}
}'
После запуска этой script первые две команды (демпинговые продукты, затем установка индекса), похоже, работают, давая мне следующее:
{"ok":true,"acknowledged":true}
{"ok":true,"acknowledged":true}
Затем он выдает ошибку после вызова сопоставления, давая мне следующее:
{"error":"ActionRequestValidationException[Validation Failed: 1: mapping type is missing;]","status":500}
Может ли кто-нибудь увидеть, что я делаю неправильно? Поиск google запускает автозаполнение "mapping not found elasticsearch", поэтому, похоже, это очень распространенная ошибка.
Ответы
Ответ 1
Оказывается, это происходит потому, что к типу нужно применить отображение:
Я попытался применить его к неправильному:
curl -XPUT 10.160.86.134:9200/products/_mapping -d '{
Он должен применяться к типу типа:
curl -XPUT 10.160.86.134:9200/products/product/_mapping -d '{
Печально, что простой поиск Google не смог ответить на этот вопрос. Также предыдущий пост, который я связал, очень вводит в заблуждение, и ответ неверен, и я также укажу там.
Ответ 2
Устанавливает отображение индекса для поиска в Elastic. Я попробовал это с последней версией Elastic search 1.7.3, и мне удалось успешно установить отображение в индекс.
Я попробовал следующее: