es
parent
a3ce788013
commit
1430132706
@ -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); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue