- версия elastisearch: 7.3.2
- Все используемые там документы взяты из этого урока .
У меня естьимпортировал по этой ссылке файл movies_elastic.json.Когда я обратился к нему по адресу: http://localhost:9200/movies/?pretty, я получил документ JSON, для которого я даю для каждого ключа документа его тип и способ его анализа: ключевое слово, текст, long, float, date.
{
"movies" : {
"aliases" : { },
"mappings" : {
"properties" : {
"fields" : {
"properties" : {
"actors" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"directors" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"genres" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"image_url" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"plot" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"rank" : {
"type" : "long"
},
"rating" : {
"type" : "float"
},
"release_date" : {
"type" : "date"
},
"running_time_secs" : {
"type" : "long"
},
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"year" : {
"type" : "long"
}
}
},
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1568894285856",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "4tvtLNrTRuij4-a0hGBZFQ",
"version" : {
"created" : "7030299"
},
"provided_name" : "movies"
}
}
}
}
Отображение текста в моей базе данных по умолчанию включает в себя ключевые слова «ключевое слово», теперь я хочу преобразовать любое поле, которое не требует необработанного анализа, который позволяет принимать данные как есть, не анализируя их.
Я попытался загрузить сопоставление для нового индекса "movies2" с помощью:
curl -XPUT -H "Content-Type: application/json" localhost:9200/movies2 -d @mapping_movies/mapping.json
Однако я получаю следующую ошибку:
JSON
error
root_cause
0
type : "mapper_parsing_exception"
reason : "Root mapping definition has unsupported parameters: [movie : {properties={id={type=text, fields={keyword={ignore_above=256, type=keyword}}}, fields={properties={actors={type=text, fields={raw={index=false, type=text}}}, plot={type=text, fields={keyword={ignore_above=256, type=keyword}}}, release_date={type=date}, year={type=long}, genres={type=text, fields={raw={index=false, type=text}}}, image_url={type=text, fields={raw={index=false, type=text}}}, directors={type=text, fields={raw={index=false, type=text}}}, rating={type=float}, rank={type=long}, title={type=text, fields={keyword={ignore_above=256, type=keyword}}}, running_time_secs={type=long}}}, type={type=text, fields={keyword={ignore_above=256, type=keyword}}}}}]"
type : "mapper_parsing_exception"
reason : "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [movie : {properties={id={type=text, fields={keyword={ignore_above=256, type=keyword}}}, fields={properties={actors={type=text, fields={raw={index=false, type=text}}}, plot={type=text, fields={keyword={ignore_above=256, type=keyword}}}, release_date={type=date}, year={type=long}, genres={type=text, fields={raw={index=false, type=text}}}, image_url={type=text, fields={raw={index=false, type=text}}}, directors={type=text, fields={raw={index=false, type=text}}}, rating={type=float}, rank={type=long}, title={type=text, fields={keyword={ignore_above=256, type=keyword}}}, running_time_secs={type=long}}}, type={type=text, fields={keyword={ignore_above=256, type=keyword}}}}}]"
caused_by
type : "mapper_parsing_exception"
reason : "Root mapping definition has unsupported parameters: [movie : {properties={id={type=text, fields={keyword={ignore_above=256, type=keyword}}}, fields={properties={actors={type=text, fields={raw={index=false, type=text}}}, plot={type=text, fields={keyword={ignore_above=256, type=keyword}}}, release_date={type=date}, year={type=long}, genres={type=text, fields={raw={index=false, type=text}}}, image_url={type=text, fields={raw={index=false, type=text}}}, directors={type=text, fields={raw={index=false, type=text}}}, rating={type=float}, rank={type=long}, title={type=text, fields={keyword={ignore_above=256, type=keyword}}}, running_time_secs={type=long}}}, type={type=text, fields={keyword={ignore_above=256, type=keyword}}}}}]"
status : 400
В приведенном ниже сопоставлении яизменил тип для актеров, режиссеров, жанров и URL.Таким образом, поля действительно текстовые (тип), но анализируются как необработанные данные (поля: {raw: {raw: {type: "keyword"}}):
{
"mappings" : {
"movie" : {
"properties" : {
"fields" : {
"properties" : {
"actors" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
}
},
"directors" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
}
},
"genres" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
}
},
"image_url" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
}
},
"plot" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"rank" : {
"type" : "long"
},
"rating" : {
"type" : "float"
},
"release_date" : {
"type" : "date"
},
"running_time_secs" : {
"type" : "long"
},
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"year" : {
"type" : "long"
}
}
},
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
Я предполагаю, что командыЯ пробовал не обновляться для эластичного 7.3.2
Обновление
Я следовал советам Вала и сделал следующий файл сопоставления:
{
"aliases" : { },
"mappings" : {
"properties" : {
"fields" : {
"properties" : {
"actors" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
}
},
"directors" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
}
},
"genres" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
}
},
"image_url" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
}
},
"plot" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"rank" : {
"type" : "long"
},
"rating" : {
"type" : "float"
},
"release_date" : {
"type" : "date"
},
"running_time_secs" : {
"type" : "long"
},
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"year" : {
"type" : "long"
}
}
},
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
Однако я не былвозможность импортировать новые данные.Следующая команда
curl -XPUT -H "Content-Type: application/json" localhost:9200/_bulk --data-binary @mapping_movies/movies_elastic2.json
выдала мне следующую ошибку:
{
"took": 44239,
"errors": true,
"items": [
{
"index": {
"_index": "movies2",
"_type": "movie",
"_id": "1",
"status": 400,
"error": {
"type": "illegal_argument_exception",
"reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
}
}
},
{
"index": {
"_index": "movies2",
"_type": "movie",
"_id": "2",
"status": 400,
"error": {
"type": "illegal_argument_exception",
"reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
}
}
},
{
"index": {
"_index": "movies2",
"_type": "movie",
"_id": "3",
"status": 400,
"error": {
"type": "illegal_argument_exception",
"reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
}
}
},
{
"index": {
"_index": "movies2",
"_type": "movie",
"_id": "4",
"status": 400,
"error": {
"type": "illegal_argument_exception",
"reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
}
}
},
{
"index": {
"_index": "movies2",
"_type": "movie",
"_id": "5",
"status": 400,
"error": {
"type": "illegal_argument_exception",
"reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
}
}
},
...