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