В конце вопроса приведена терминальная команда, показывающая простое сопоставление Elasticsearch. Мне нужно настроить этот вид сопоставления для индекса с помощью Elasticsearch-PHP. И мне нужно сделать это во время индексации данных.
Я знаю, как индексировать в Elasticsearch-PHP. Это будет что-то вроде
for($i = 0; $i < 100; $i++) {
$params['body'][] = [
'index' => [
'_index' => 'my_index',
'_type' => 'my_type',
]
];
$params['body'][] = [
'my_field' => 'my_value',
'second_field' => 'some more values'
];
}
$responses = $client->bulk($params);
Мой вопрос заключается в том, как я могу настроить отображение, соответствующий конкретному отображению, приведенному ниже в форматеasticsearch-PHP (я верю, что он станет ассоциативным массивом, но я не уверен в дальнейших подробностях)?
Это пример ES Mapping, который я хочу преобразовать в формат, используемый в PHP:
PUT _template/packets
{
"template": "packets-*",
"mappings": {
"pcap_file": {
"dynamic": "false",
"properties": {
"timestamp": {
"type": "date"},
"layers": {
"properties": {
"ip": {
"properties": {
"ip_ip_src": {
"type": "ip"},
"ip_ip_dst": {
"type": "ip"}
}
}
}
}
}
}
}
}
Если вы не обновите свое отображение — вам не нужно put
отображение каждый раз, когда вы переиндексируете данные вasticsearch. Но если вы это сделаете, вы создадите индекс с новым именем, вы можете сделать это:
$put = [
'mappings' => [
// your mapping here
],
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://yourHost:9200/yourIndex');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($put));
curl_exec($ch);
или вы можете использовать эластичный пакет поиска:
$params = [
'index' => 'yourIndex',
'body' => [
'mappings' => [
// your mapping here
]
]
];
$response = $client->indices()->create($params);
Других решений пока нет …