2016-09-19 38 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