2016-09-19 42 views
1

我想這個表添加到algolia:Mysql的JSON場和algolia

+-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | data | json | NO | | NULL | | | id | int(10) unsigned | NO | PRI | NULL | auto_increment | +-------+------------------+------+-----+---------+----------------+

沒有對這個表和數據的內容只有一行是:

[ 
    { 
     "id":"7cc481e3eab24b4ef9ccc945c00f7784", 
     "desc":"shirts desc", 
     "name":"Shirts", 
     "slug":"shirts", 
     "image":"7cc481e3eab24b4ef9ccc945c00f7784.jpeg", 
     "categories":[ 

     ] 
    }, 
    { 
     "id":"67d188521fa8531dd3e2044814cb942342", 
     "desc":"some desc", 
     "name":"Jackets", 
     "slug":"jackets", 
     "image":"67d188521fa8531dd3e2044814cb942342.jpeg", 
     "categories":[ 
     { 
      "id":"671a83b87369ee6773774c0d6d4455e2", 
      "desc":"sealed desc", 
      "name":"Sealedq", 
      "slug":"sealedq", 
      "image":"" 
     } 
     ] 
    }, 
    { 
     "id":"ad03b6be35714f7bb7f2ecc82d512c79", 
     "desc":"some desc", 
     "name":"Trousers", 
     "slug":"trousers", 
     "image":"ad03b6be35714f7bb7f2ecc82d512c79.jpg" 
    }, 
    { 
     "id":"ea265cbc18db7ad6b3a3013af3070890", 
     "desc":"some desc", 
     "name":"Sweaters", 
     "slug":"sweaters", 
     "image":"ea265cbc18db7ad6b3a3013af3070890.jpeg" 
    } 
] 

這些都使用Laravel 5.2, 當我將這些數據發送給algolia時,它將只創建一條記錄並將objectID設置爲表的id。 Alglia

我怎樣才能只發送數據字段到algolia並設置id的數據字段爲objectID?

我使用此代碼只是爲了測試,它適用於我,但我認爲這是不正確的方式,也許我應該使用同義詞。

$client = new AlgoliaSearch\Client("AppID", "AdminKey"); 
$index = $client->initIndex('catalog'); 


$results = Model::select('data')->first(); 
$results = json_decode($results->data, true); 
if ($results) 
{ 
    $batch = array(); 
    // iterate over results and send them by batch of 10000 elements 
    foreach ($results as $row) 
    { 
    // select the identifier of this row 
    $row['objectID'] = $row['id']; 

    array_push($batch, $row); 


    } 

return $index->saveObjects($batch); 
} 

回答

4

我怎麼能只發送數據字段algolia並設置數據字段的id作爲的objectID?

我使用此代碼只是爲了測試,它適用於我,但我認爲這是不正確的方式,也許我應該使用同義詞。

解析您身邊的數據內容並將其添加到對象是正確的方法。我不知道你正在使用的PHP框架,但你可以做類似的事情:

$batch = array(); 
$rows = Model::select('*')->all(); 
foreach ($rows as $row) { 
    $row['objectID'] = $row['id'] 
    $row['data'] = json_decode($row['data'], true); 
    array_push($batch, $row); 
} 
$index->saveObjects($batch); 

同義詞用於別的。您可以閱讀更多here