У меня есть Elastic server (версия 2.3.1) и я пытаюсь использовать официальный PHP client для хранения документов. Структура Я создаю в PHP
:PHP Elasticsearch «Set» mapping
$data = Array(
"index"=> "my_index",
"type" => "my_type",
"id" => $my_generated_id,
"body" => Array(
"name" => $name,
"other_field" => $other_data,
"tags" => array_unique($tags)
)
);
print_r ($ данные):
Array
(
[index] => my_index
[type] => my_type
[id] => AFCDEFGH
[body] => Array
(
[name] => It is my name
[other_field] => some other information
[tags] => Array
(
[0] => Some tag
[2] => Some other tag
)
)
)
первый документ хорошо сохраненный (и это создает индекс), но как только я пытаюсь вставить документ с различным числом тегов я получаю ошибку:
PHP Fatal error: Uncaught Elasticsearch\Common\Exceptions\BadRequest400Exception: {"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"object mapping for [tags] tried to parse field [null] as object, but found a concrete value"}],"type":"mapper_parsing_exception","reason":"object mapping for [tags] tried to parse field [null] as object, but found a concrete value"},"status":400} in /home/test/test/php/vendor/elasticsearch/elasticsearch/src/Elasticsearch/Connections/Connection.php:655
Я знаю, что индекс строится на неверном пути:
{
"my_index":{
"aliases":{
},
"mappings":{
"targy":{
"properties":{
"other_field":{
"type":"string"
},
"name":{
"type":"string"
},
"tags":{
"properties":{
"0":{
"type":"string"
},
"2":{
"type":"string"
}
}
}
}
}
},
"settings":{
"index":{
"creation_date":"1477414478664",
"number_of_shards":"5",
"number_of_replicas":"1",
"uuid":"yZiN4uUgRXe9vyaN4uWbGg",
"version":{
"created":"2030199"
}
}
},
"warmers":{
}
}
}
Как создать отображение в PHP
вручную, чтобы иметь возможность обрабатывать ноль или более тег одновременно? (Я думаю, что решение не справиться с этим «мешок» из strings
как array
, но вместо того, чтобы какой-то другой тип данных, который я смотрел за последние несколько дней.)
Примеры:
[tags] => Array
(
[0] => Some tag
[2] => Some other tag
[3] => Some other tag
)
//...
[tags] => Array
(
)
Спасибо за ваш ответ, но этот путь я смогу хранить пустой или, например, 6 тег для документа? У меня есть различные подсчеты тегов, и я не могу определить, сколько из них будет представлено. – Mark
Да, у вас не будет ограничения на размер массива, и ваше сопоставление останется «тегами»: {type: "string"} ', то же, что и для строки. – Pandawan