ztt 9 months ago
parent a3ce788013
commit 1430132706
  1. 23
      app/command/SyncGoodsToEs.php
  2. 183
      app/common/library/elasticsearch/Client.php
  3. 146
      app/common/service/GoodsEs.php
  4. 3
      composer.json
  5. 301
      composer.lock
  6. 1
      config/console.php
  7. 6
      vendor/services.php

@ -0,0 +1,23 @@
<?php
namespace app\command;
use think\console\Command;
class SyncGoodsToEs extends Command
{
protected function configure()
{
// 指令配置
$this->setName('syncGoodsToEs')
->setDescription('同步商品数据到ES');
}
protected function execute(Input $input, Output $output)
{
$output->writeln('syncGoodsToEs');
}
}

@ -0,0 +1,183 @@
<?php
namespace app\common\library\elasticsearch;
use Elastic\Elasticsearch\ClientBuilder;
use think\Exception;
class Client
{
public $client;
const ES_HOST_NAME = '114.55.95.135:9200';
private static Client $instance;
private function __construct()
{
$this->client = ClientBuilder::create()->setHosts([self::ES_HOST_NAME])->build();
}
private function __clone() {
}
public static function getInstance(){
if (is_null(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
public function existsIndex(String $index_name) {
$params = [
'index' => $index_name
];
return $this->client->indices()->exists($params);
}
/**
* 创建索引
*/
public function createIndex(String $index_name, array $mapping = []): array
{
if ($this->existsIndex($index_name)) {
throw new Exception('索引已存在'. $index_name);
}
//只能创建一次
$params = [
'index' => $index_name,
'body' => [
'settings' => [
'number_of_shards' => 5,
'number_of_replicas' => 1
],
'mappings' => $mapping
]
];
return $this->client->indices()->create($params);
}
/**
* 删除索引
*/
public function deleteIndex(String $index_name = ''): array{
$params = ['index' => $index_name];
return $this->client->indices()->delete($params);
}
/**
* 添加文档
* @param $id
* @param $doc ['id'=>100, 'title'=>'phone']
* @param string $index_name
* @param string $type_name
*/
public function addDoc($id, $doc, string $index_name = 'gyx_ik', string $type_name = '_doc'): array
{
$params = [
'index' => $index_name,
'type' => $type_name,
'id' => $id,
'body' => $doc
];
return $this->client->index($params);
}
/**
* 判断文档存在
* @param int $id
* @param string $index_name
* @param string $type_name
* @return bool
*/
public function existsDoc(int $id = 1, string $index_name = 'gyx_ik', string $type_name = '_doc'): bool
{
$params = [
'index' => $index_name,
'type' => $type_name,
'id' => $id
];
return $this->client->exists($params);
}
/**
* 获取文档
* @param int $id
* @param string $index_name
* @param string $type_name
* @return array
*/
public function getDoc(int $id = 1, string $index_name = 'gyx_ik', string $type_name = '_doc'): array
{
$params = [
'index' => $index_name,
'type' => $type_name,
'id' => $id
];
return $this->client->get($params);
}
/**
* 更新文档
* @param int $id
* @param string $index_name
* @param string $type_name
* @param array $body
* @return array
*/
public function updateDoc(int $id = 1, array $body = [], string $index_name = 'gyx_ik', string $type_name = '_doc'): array
{
// 可以灵活添加新字段,最好不要乱添加
$params = [
'index' => $index_name,
'type' => $type_name,
'id' => $id,
'body' => $body
];
return $this->client->update($params);
}
/**
* 删除文档
* @param int $id
* @param string $index_name
* @param string $type_name
* @return array
*/
public function deleteDoc(int $id = 1, string $index_name = 'gyx_ik', string $type_name = '_doc'): array
{
$params = [
'index' => $index_name,
'type' => $type_name,
'id' => $id
];
return $this->client->delete($params);
}
/**
* 搜索文档:分页,排序,权重,过滤
* @param string $index_name
* @param string $type_name
* @param array $body
* @return array
*/
public function searchDoc(array $body = [], string $index_name = "gyx_ik", string $type_name = "_doc"): array
{
$params = [
'index' => $index_name,
'type' => $type_name,
'body' => $body
];
return $this->client->search($params);
}
}

@ -0,0 +1,146 @@
<?php
namespace app\common\service;
use app\common\library\elasticsearch\Client;
class GoodsEs
{
private Client $esService;
public function __construct()
{
$this->esService = Client::getInstance();
}
/**
* 查询商品列表
* @param $params
* @return
*/
public function list($params)
{
$page = 1;
$limit = 10;
$body = [
'query' => [
'match_all' => []
],
'from' => ($page - 1) * $limit,
'size' => $limit,
'sort' => [
'id' => [
'order' => 'desc'
]
]
];
return $this->esService->searchDoc($body);
}
/**
* 更新商品
*/
public function updateDoc($goods_id)
{
$goods_id = 1;
$doc = [
'id' => $goods_id,
'video_title' => '少爷的甜蜜良药',
'director' => '吴宇森',
'intro' => '吴宇森导演的《少爷的甜蜜良药》是吴宇森导演的经典作品,讲述了一个boyfriend和girlfriend的故事,boyfriend因为工作原因,被拒了girlfriend的offer,然后boyfriend和girlfriend一起去一个地方,然后boyfriend和girlfriend',
'cover' => 'https://oss-duanju-file.luochen.com/cover/202404/62249c6a-5f57-45cf-90ac-be6de5890ce0.jpg?x-oss-process=image/resize,m_fixed,h_400,w_360',
'episode_count' => '12',
'wechat_vid' => 'wx_vid_1',
'duration' => '01:02:03',
'service_types' => '2,3',
];
$res = $this->esService->updateDoc($goods_id, $doc);
var_dump($res);
}
/**
* 创建商品
* @return
*/
public function createDoc($goods_id)
{
$goods_id = 1;
$doc = [
'id' => $goods_id,
'video_title' => '少爷的甜蜜良药',
'director' => '吴宇森',
'intro' => '吴宇森导演的《少爷的甜蜜良药》是吴宇森导演的经典作品,讲述了一个boyfriend和girlfriend的故事,boyfriend因为工作原因,被拒了girlfriend的offer,然后boyfriend和girlfriend一起去一个地方,然后boyfriend和girlfriend',
'cover' => 'https://oss-duanju-file.luochen.com/cover/202404/62249c6a-5f57-45cf-90ac-be6de5890ce0.jpg?x-oss-process=image/resize,m_fixed,h_400,w_360',
'episode_count' => '12',
'wechat_vid' => 'wx_vid_1',
'duration' => '01:02:03',
'service_types' => '2,3',
];
$res = $this->esService->addDoc($goods_id, $doc);
var_dump($res);
}
/**
* 删除商品
*/
public function deleteDoc($goods_id)
{
$res = $this->esService->deleteDoc($goods_id);
var_dump($res);
}
/**
* 创建商品Index
* @return void
* @throws Exception
*/
function createGoodsIndex()
{
$mapping = [
'properties' => [
'id' => [
'type' => 'keyword'
],
'video_title' => [
'type' => 'text',
"analyzer" => "ik_smart"
],
'director' => [
'type' => 'text',
"analyzer" => "ik_smart"
],
'intro' => [
'type' => 'text',
"analyzer" => "ik_smart"
],
'cover' => [
'type' => 'keyword'
],
'episode_count' => [
'type' => 'keyword'
],
'wechat_vid' => [
'type' => 'keyword'
],
'duration' => [
'type' => 'keyword'
],
'service_types' => [
'type' => 'keyword'
],
]
];
$res = $this->esService->createIndex('video_list', $mapping);
var_dump($res);
}
}

@ -53,7 +53,8 @@
"overtrue/easy-sms": "^2.0",
"overtrue/wechat": "~4.0",
"alipaysdk/easysdk": "^2.2",
"wechatpay/wechatpay": "^1.4"
"wechatpay/wechatpay": "^1.4",
"elasticsearch/elasticsearch": "v8.6.0"
},
"require-dev": {
"symfony/var-dumper": "^4.2"

301
composer.lock generated

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "6a7996d88fd82c5b30b1a2ce37fdcce9",
"content-hash": "b5ed7820a7c4b5d436edd224b891a3ba",
"packages": [
{
"name": "adbario/php-dot-notation",
@ -432,6 +432,117 @@
},
"time": "2021-07-05T04:03:22+00:00"
},
{
"name": "elastic/transport",
"version": "v8.8.0",
"source": {
"type": "git",
"url": "https://github.com/elastic/elastic-transport-php.git",
"reference": "cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/elastic/elastic-transport-php/zipball/cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b",
"reference": "cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.0",
"php": "^7.4 || ^8.0",
"php-http/discovery": "^1.14",
"php-http/httplug": "^2.3",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0 || ^2.0",
"psr/log": "^1 || ^2 || ^3"
},
"require-dev": {
"nyholm/psr7": "^1.5",
"php-http/mock-client": "^1.5",
"phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^9.5"
},
"type": "library",
"autoload": {
"psr-4": {
"Elastic\\Transport\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "HTTP transport PHP library for Elastic products",
"keywords": [
"PSR_17",
"elastic",
"http",
"psr-18",
"psr-7",
"transport"
],
"support": {
"issues": "https://github.com/elastic/elastic-transport-php/issues",
"source": "https://github.com/elastic/elastic-transport-php/tree/v8.8.0"
},
"time": "2023-11-08T10:51:51+00:00"
},
{
"name": "elasticsearch/elasticsearch",
"version": "v8.6.0",
"source": {
"type": "git",
"url": "https://github.com/elastic/elasticsearch-php.git",
"reference": "03b145a3fd1dc984d7c2c79638c9257b1a17f8b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/03b145a3fd1dc984d7c2c79638c9257b1a17f8b7",
"reference": "03b145a3fd1dc984d7c2c79638c9257b1a17f8b7",
"shasum": ""
},
"require": {
"elastic/transport": "^8.5",
"guzzlehttp/guzzle": "^7.0",
"php": "^7.4 || ^8.0",
"psr/http-client": "^1.0",
"psr/http-message": "^1.0",
"psr/log": "^1|^2|^3"
},
"require-dev": {
"ext-yaml": "*",
"ext-zip": "*",
"mockery/mockery": "^1.5",
"nyholm/psr7": "^1.5",
"php-http/mock-client": "^1.5",
"phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^9.5",
"symfony/finder": "~4.0",
"symfony/http-client": "^5.0|^6.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Elastic\\Elasticsearch\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHP Client for Elasticsearch",
"keywords": [
"client",
"elastic",
"elasticsearch",
"search"
],
"support": {
"issues": "https://github.com/elastic/elasticsearch-php/issues",
"source": "https://github.com/elastic/elasticsearch-php/tree/v8.6.0"
},
"time": "2022-10-18T13:38:48+00:00"
},
{
"name": "ezyang/htmlpurifier",
"version": "v4.14.0",
@ -1983,6 +2094,194 @@
"abandoned": "w7corp/easywechat",
"time": "2021-12-27T13:56:47+00:00"
},
{
"name": "php-http/discovery",
"version": "1.19.4",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
"reference": "0700efda8d7526335132360167315fdab3aeb599"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599",
"reference": "0700efda8d7526335132360167315fdab3aeb599",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": "^7.1 || ^8.0"
},
"conflict": {
"nyholm/psr7": "<1.0",
"zendframework/zend-diactoros": "*"
},
"provide": {
"php-http/async-client-implementation": "*",
"php-http/client-implementation": "*",
"psr/http-client-implementation": "*",
"psr/http-factory-implementation": "*",
"psr/http-message-implementation": "*"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"graham-campbell/phpspec-skip-example-extension": "^5.0",
"php-http/httplug": "^1.0 || ^2.0",
"php-http/message-factory": "^1.0",
"phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
"sebastian/comparator": "^3.0.5 || ^4.0.8",
"symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
},
"type": "composer-plugin",
"extra": {
"class": "Http\\Discovery\\Composer\\Plugin",
"plugin-optional": true
},
"autoload": {
"psr-4": {
"Http\\Discovery\\": "src/"
},
"exclude-from-classmap": [
"src/Composer/Plugin.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
"homepage": "http://php-http.org",
"keywords": [
"adapter",
"client",
"discovery",
"factory",
"http",
"message",
"psr17",
"psr7"
],
"support": {
"issues": "https://github.com/php-http/discovery/issues",
"source": "https://github.com/php-http/discovery/tree/1.19.4"
},
"time": "2024-03-29T13:00:05+00:00"
},
{
"name": "php-http/httplug",
"version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
"reference": "625ad742c360c8ac580fcc647a1541d29e257f67"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67",
"reference": "625ad742c360c8ac580fcc647a1541d29e257f67",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0",
"php-http/promise": "^1.1",
"psr/http-client": "^1.0",
"psr/http-message": "^1.0 || ^2.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0",
"phpspec/phpspec": "^5.1 || ^6.0 || ^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eric GELOEN",
"email": "geloen.eric@gmail.com"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://sagikazarmark.hu"
}
],
"description": "HTTPlug, the HTTP client abstraction for PHP",
"homepage": "http://httplug.io",
"keywords": [
"client",
"http"
],
"support": {
"issues": "https://github.com/php-http/httplug/issues",
"source": "https://github.com/php-http/httplug/tree/2.4.0"
},
"time": "2023-04-14T15:10:03+00:00"
},
{
"name": "php-http/promise",
"version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3",
"phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4"
},
"type": "library",
"autoload": {
"psr-4": {
"Http\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Joel Wurtz",
"email": "joel.wurtz@gmail.com"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Promise used for asynchronous HTTP requests",
"homepage": "http://httplug.io",
"keywords": [
"promise"
],
"support": {
"issues": "https://github.com/php-http/promise/issues",
"source": "https://github.com/php-http/promise/tree/1.3.1"
},
"time": "2024-03-15T13:55:21+00:00"
},
{
"name": "phpoffice/phpspreadsheet",
"version": "1.22.0",

@ -12,5 +12,6 @@ return [
'CalDealerTime' => 'app\command\CalDealerTime',
'UpdateCollectGoodsPrice' => 'app\command\UpdateCollectGoodsPrice',
'SyncStoreBasicData' => 'app\command\SyncStoreBasicData',
'syncGoodsToEs' => 'app\command\syncGoodsToEs',
],
];

@ -1,6 +1,6 @@
<?php
// This file is automatically generated at:2023-02-22 11:45:22
declare (strict_types = 1);
<?php
// This file is automatically generated at:2024-05-27 09:06:36
declare (strict_types = 1);
return array (
0 => 'think\\app\\Service',
1 => 'think\\queue\\Service',

Loading…
Cancel
Save