Я прочитал руководство по индексированию. документы в Elasticsearch. Есть пример с массовой индексацией. У меня вопрос, правильно ли создается массив с двумя ключами для одного элемента в цикле:
for($i = 0; $i < 100; $i++) {
$params['body'][] = array(
'index' => array(
'_id' => $i
)
);
$params['body'][] = array(
'my_field' => 'my_value',
'second_field' => 'some more values'
);
}
Почему в цикле две инициализации массива $params['body'][]
? Должна быть установка индекса по тому же ключу, что и my_field
?
Я имею в виду один случай, когда вся информация об индексе добавляется в массив по одному ключу (индексу):
$params['body'][] = array(
'index' => array(
'_id' => $i
),
'my_field' => 'my_value',
'second_field' => 'some more values'
);
Также после поискового запроса я получаю ошибку:
Сообщение: Недопустимое смещение строки "совпадение" в строке, где находится:
$query['match']['name'] = $query;
где $query
— строка.
Я предполагаю, что эта ошибка связана с проблемой создания индекса, поэтому я начал с этого.
Мой код, который добавляет документ в индекс:
private function addDocument($data = array(), $type)
{
if (!empty($data)) {
foreach ($data as $key => $val) {
$params['body'][] = array(
'index' => array(
'_id' => $key,
'_type' => 'profiles',
'_index' => $this->_typeIndex($type)
)
);
$params['body'][] = (array)$val;
}
$this->client->bulk($params);
}
}
Это правильно? Потому что при поиске выдает ошибку, описанную здесь