2017-10-20 85 views
1

在問題的最後給出了一個顯示簡單Elasticsearch映射的終端命令。我需要使用Elasticsearch-PHP爲索引設置這種映射。我在索引數據時需要這樣做。如何在Elasticsearch-PHP中設置這個簡單的Elasticsearch映射?

我知道如何在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); 

我的問題是,我將如何建立一個映射,對應於elasticsearch-PHP格式如下給出的特定映射(我相信它會成爲一個關聯數組,但我不確定更多細節)?


這是例子ES映射,我想轉換爲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" 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

回答

0

如果不更新您的地圖 - 你不必put映射每次您將數據重新索引到elasticsearch。但是,如果你這樣做,你創建一個新的名稱索引,你可以這樣做:

$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); 

,或者您可以使用elasticsearch包:

$params = [ 
    'index' => 'yourIndex', 
    'body' => [ 
     'mappings' => [ 
      // your mapping here 
     ] 
    ] 
]; 
$response = $client->indices()->create($params); 
+0

嘿謝謝;你還可以告訴我如何編寫一個映射(在PHP中)對應於此處顯示的映射:https://pastebin.com/H7QEWhNN – JBel

+0

也就是說,我將如何填充已分配給「映射」的數組你的代碼在上面? – JBel