【问题标题】:Mysql json field and algoliaMysql json字段和algolia
【发布时间】:2016-09-19 18:39:16
【问题描述】:

我想将此表添加到 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。

如何只向 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);
}

【问题讨论】:

    标签: algolia


    【解决方案1】:

    如何只向 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2020-10-04
      • 1970-01-01
      • 2018-09-05
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多