You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
326 lines
8.3 KiB
326 lines
8.3 KiB
4 weeks ago
|
<?php
|
||
|
use Elasticsearch\ClientBuilder;
|
||
|
|
||
|
class ES
|
||
|
{
|
||
|
//ES客户端链接
|
||
|
private $client;
|
||
|
private $index_name;
|
||
|
|
||
|
/**
|
||
|
* 初始化ES连接
|
||
|
* ES constructor.
|
||
|
*/
|
||
|
public function __construct($index)
|
||
|
{
|
||
|
$params = array(
|
||
|
'127.0.0.1:9200'
|
||
|
);
|
||
|
|
||
|
$this->client = ClientBuilder::create()->setHosts($params)->build();
|
||
|
$this->index_name = $index;
|
||
|
|
||
|
return $this->client;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 判断索引是否存在
|
||
|
* @param string $index_name
|
||
|
* @return bool|mixed|string
|
||
|
*/
|
||
|
public function exists_index($index_name = 'test_ik')
|
||
|
{
|
||
|
$params = [
|
||
|
'index' => $index_name
|
||
|
];
|
||
|
try {
|
||
|
return $this->client->indices()->exists($params);
|
||
|
} catch (\Exception $e) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 创建索引
|
||
|
* @param string $index_name
|
||
|
* @return array|mixed|string
|
||
|
*/
|
||
|
public function create_index($index_name = 'test_ik')
|
||
|
{
|
||
|
$params = [
|
||
|
'index' => $index_name,
|
||
|
'body' => [
|
||
|
'settings' => [
|
||
|
'number_of_shards' => 3,
|
||
|
'number_of_replicas' => 0
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
try {
|
||
|
return $this->client->indices()->create($params);
|
||
|
} catch (\Exception $e) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 删除索引
|
||
|
* @param string $index_name
|
||
|
* @return array
|
||
|
*/
|
||
|
public function delete_index($index_name = 'test_ik')
|
||
|
{
|
||
|
$params = ['index' => $index_name];
|
||
|
$response = $this->client->indices()->delete($params);
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 添加文档
|
||
|
* @param $params
|
||
|
* $params = [
|
||
|
* 'index' => "es",
|
||
|
* 'type' => "article",
|
||
|
* "body" => [
|
||
|
* "title" => "",
|
||
|
* ]
|
||
|
* ];
|
||
|
* @return array
|
||
|
*/
|
||
|
public function add_doc($params)
|
||
|
{
|
||
|
return $this->client->index($params);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 判断文档存在
|
||
|
* @param int $id
|
||
|
* @param string $index_name
|
||
|
* @param string $type_name
|
||
|
* @return array|bool
|
||
|
*/
|
||
|
public function exists_doc($id = 1, $index_name = 'test_ik', $type_name = 'goods')
|
||
|
{
|
||
|
$params = [
|
||
|
'index' => $index_name,
|
||
|
'type' => $type_name,
|
||
|
'id' => $id
|
||
|
];
|
||
|
|
||
|
$response = $this->client->exists($params);
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取文档
|
||
|
* @param int $id
|
||
|
* @param string $index_name
|
||
|
* @param string $type_name
|
||
|
* @return array
|
||
|
*/
|
||
|
public function get_doc($id = 1, $index_name = 'test_ik', $type_name = 'goods')
|
||
|
{
|
||
|
$params = [
|
||
|
'index' => $index_name,
|
||
|
'type' => $type_name,
|
||
|
'id' => $id
|
||
|
];
|
||
|
|
||
|
$response = $this->client->get($params);
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 修改文档
|
||
|
*$params = [
|
||
|
'index' => "es",
|
||
|
'type' => "article",
|
||
|
'id' => "OIwzxXgBzF70K-DobSSC",
|
||
|
"body" => [
|
||
|
"doc" => [
|
||
|
"title" => "6100万颗心的共同记忆 再次C位亮相,闪耀全球!",
|
||
|
"desn" => "刚刚过去的这个清明节,与往年一样,有人凭寄哀思,有人缅怀忠魂。但也有一些瞬间,让人记起久久不能释怀,给这个特殊节气增添了一些格外不同的味道。"
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
* @param array $params
|
||
|
* @return array
|
||
|
*/
|
||
|
public function update_doc($params = [])
|
||
|
{
|
||
|
$response = $this->client->update($params);
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 删除文档
|
||
|
* @param int $id
|
||
|
* @param string $index_name
|
||
|
* @param string $type_name
|
||
|
* @return array
|
||
|
*/
|
||
|
public function delete_doc($id = 1, $index_name = 'test_ik', $type_name = 'goods')
|
||
|
{
|
||
|
$params = [
|
||
|
'index' => $index_name,
|
||
|
'type' => $type_name,
|
||
|
'id' => $id
|
||
|
];
|
||
|
|
||
|
$response = $this->client->delete($params);
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 搜索文档 (分页,排序,权重,过滤)
|
||
|
* @param string $index_name
|
||
|
* @param string $type_name
|
||
|
* @param array $body
|
||
|
$body = [
|
||
|
'query' => [
|
||
|
'bool' => [
|
||
|
'should' => [
|
||
|
[
|
||
|
'match' => [
|
||
|
'cate_name' => [
|
||
|
'query' => $keywords,
|
||
|
'boost' => 4, // 权重大
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
'match' => [
|
||
|
'goods_name' => [
|
||
|
'query' => $keywords,
|
||
|
'boost' => 3,
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
'match' => [
|
||
|
'goods_introduce' => [
|
||
|
'query' => $keywords,
|
||
|
'boost' => 2,
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
],
|
||
|
],
|
||
|
'sort' => ['id'=>['order'=>'desc']],
|
||
|
'from' => $from,
|
||
|
'size' => $size
|
||
|
];
|
||
|
* @return array
|
||
|
*/
|
||
|
public function search_doc($index_name = "test_ik", $type_name = "goods", $body = [])
|
||
|
{
|
||
|
$params = [
|
||
|
'index' => $index_name,
|
||
|
'type' => $type_name,
|
||
|
'body' => $body
|
||
|
];
|
||
|
|
||
|
$results = $this->client->search($params);
|
||
|
return $results;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $index_name 搜索列表
|
||
|
* @param string $type_name
|
||
|
* @return array|callable
|
||
|
*
|
||
|
*/
|
||
|
public function select_doc($index_name = 'test_ik', $type_name = 'goods'){
|
||
|
$params=[
|
||
|
'index' => $index_name,
|
||
|
'type' => $type_name,
|
||
|
];
|
||
|
$response = $this->client->search($params);
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $index_name // 高亮显示
|
||
|
* @param string $type_name
|
||
|
* @param array $body
|
||
|
* @return array|callable
|
||
|
*
|
||
|
*
|
||
|
$body=[
|
||
|
'query' => [
|
||
|
'match' => [
|
||
|
'desn' => '董事长'
|
||
|
]
|
||
|
],
|
||
|
'highlight' => [
|
||
|
'pre_tags' => ["<b class='key' style='color:red'>"],
|
||
|
'post_tags' => ["</b>"],
|
||
|
'fields' => [
|
||
|
"desn" => new \stdClass()
|
||
|
]
|
||
|
],
|
||
|
];
|
||
|
*/
|
||
|
public function highlight_doc($index_name = 'test_ik', $type_name = 'goods' , $body = []){
|
||
|
$params=[
|
||
|
'index' => $index_name,
|
||
|
'type' => $type_name,
|
||
|
'body' => $body
|
||
|
|
||
|
];
|
||
|
$response = $this->client->search($params);
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
public function create_weibo_index() {
|
||
|
$res = $this->exists_index($this->index_name);
|
||
|
if($res) return true;
|
||
|
|
||
|
$params = [
|
||
|
'index' => $this->index_name,
|
||
|
'body' => [
|
||
|
'settings' => [
|
||
|
'number_of_shards' => 2,
|
||
|
'number_of_replicas' => 1,
|
||
|
'analysis' => [
|
||
|
'analyzer' => [
|
||
|
'ik_analyzer' => [
|
||
|
'type' => 'custom',
|
||
|
'tokenizer' => 'ik_max_word'
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
'mappings' => [
|
||
|
'properties' => [
|
||
|
'id' => ['type' => 'long'],
|
||
|
'uid' => ['type' => 'long'],
|
||
|
'wid' => ['type' => 'long'],
|
||
|
'content' => [
|
||
|
'type' => 'text',
|
||
|
'analyzer' => 'ik_max_word',
|
||
|
// 'fields' => [
|
||
|
// 'semantic' => [
|
||
|
// 'type' => 'dense_vector',
|
||
|
// 'dims' => 768
|
||
|
// ]
|
||
|
// ]
|
||
|
],
|
||
|
'created_at' => ['type' => 'date'],
|
||
|
'comments_count' => ['type' => 'long'],
|
||
|
'attitudes_count' => ['type' => 'long'],
|
||
|
'status' => ['type' => 'long']
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
|
||
|
try {
|
||
|
return $this->client->indices()->create($params);
|
||
|
} catch (\Exception $e) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|