> 先安裝: composer require elasticsearch/elasticsearch
> 文檔地址:
> [elasticsearch 中文文檔]([https://www.elastic.co/guide/cn/elasticsearch/php/current/index.html](https://www.elastic.co/guide/cn/elasticsearch/php/current/index.html))
[文檔2]([https://es.xiaoleilu.com/030\_Data/05\_Document.html](https://es.xiaoleilu.com/030_Data/05_Document.html))
`
~~~
<?php
// +----------------------------------------------------------------------
// | Created by Vscode: JRKAdmin框架 [ JRKAdmin ]
// +----------------------------------------------------------------------
// | Copyright (c) 2019~2022 [LuckyHHY] All rights reserved.
// +----------------------------------------------------------------------
// | SiteUrl: http://www.luckyhhy.cn
// +----------------------------------------------------------------------
// | Author: Jackhhy <jackhhy520@qq.com>
// +----------------------------------------------------------------------
// | Date: 2019/12/27-8:59
// +----------------------------------------------------------------------
// | Description:
// +----------------------------------------------------------------------
namespace app\index\service;
use Elasticsearch\ClientBuilder;
class ContentService
{
/**
* @param array $param
* @param array $keywords
* @return array
* @author: Jackhhy <jackhhy520@qq.com>
* @name: search_common
* @describe:公共搜索
*/
public static function search_common( $param = [], $keywords = [],$type=2){
$client = ClientBuilder::create()->build();
//索引
$params = [
'index' => 'ai_index',
'type' => 'ai_type',
];
$key = @implode(",", $keywords); //關鍵詞
if ($type==2){
//主要檢索
$params['body']['query']['bool']['must'][]['match']['content'] = ['query' => "$key", 'operator' => 'and'];
}else{
//主要檢索
$params['body']['query']['bool']['must'][]['match']['content'] = ['query' => "$key", 'operator' => 'or'];
}
//句子來源
if($param['structures']=="all"){
}elseif($param['structures']=='abstract'){
$params['body']['query']['bool']['must'][]['match']['tag_id'] = 1;
}elseif($param['structures']=='introduction'){
$params['body']['query']['bool']['must'][]['terms'] = ['tag_id' => [2,13]];
// $params['body']['query']['bool']['must'][]['match']['tag_id'] = 2;
}elseif($param['structures']=='methods'){
$params['body']['query']['bool']['must'][]['match']['tag_id'] = 3;
}elseif($param['structures']=='results'){
$params['body']['query']['bool']['must'][]['match']['tag_id'] = 4;
}elseif($param['structures']=='discussion'){
$params['body']['query']['bool']['must'][]['match']['tag_id'] = 5;
}
// IF值查詢
if ((int)$param['if'] != 0) {
$str = "";
switch ((int)$param['if']) {
case 3:
$str = ['gte' => 0, 'lt' => 3];
break;
case 5:
$str = ['gte' => 3, 'lt' => 5];
break;
case 10:
$str = ['gte' => 5, 'lt' => 10];
break;
case 15:
$str = ['gte' => 10, 'lt' => 100];
break;
}
$params['body']['query']["bool"]['must'][]["range"]['current_factor'] = $str;
}
/*分區*/
if ((int)$param['jcr'] != 5) {
$params['body']['query']["bool"]['must'][]["match"]['types_num'] = (int)$param['jcr'];
}
if (isset($param['end_time']) && $param['end_time'] != 0) {
$y = date("Y", time());
if ($param['end_time'] == 5) { //近五年
$f = $y - 5;
$b = $f."-01-01";
$e = $y."-12-31";
} else {
if ($param['end_time'] == 3) {
$f = $y - 3;
$b = $f."-01-01";
$e = $y."-12-31";
} else {
if ($param['end_time'] == 2) {
$f = $y - 2;
$b = $f."-01-01";
$e = $y."-12-31";
} else {
$b = $param['end_time']."-01-01";
$e = $param['end_time']."-12-31";
}
}
}
$params['body']['query']["bool"]['must'][]["range"]['publication_time'] = [
'from' => "$b",
'to' => "$e",
];
}
if (isset($param['kai_end']) && $param['kai_end'] != 0) {
$xx = @explode("_", $param['kai_end']);
$b = $xx[0]."-01-01";
$e = $xx[1]."-12-31";
if ((int)$param['jcr'] == 5 && (int)$param['if'] == 0) {
$params['body']['query']["bool"]['must'][]["range"]['publication_time'] = [
'from' => "$b",
'to' => "$e",
];
}
}
//排序
$or = @explode(" ", $param['order']);
if (strpos($param['order'], "pub_cn_rate") !== false || strpos($param['order'], "current_factor") !== false) {
if (count($or) == 1) {
$k = $param['order'];
$params['body']['sort'] = ["$k" => ['order' => 'desc']];
} else {
if (count($or) > 1) {
//dump($or);
$params['body']['sort'] = [$or[0] => ['order' => $or[1]]];
}
}
} else {
if (count($or) == 1) {
$params['body']['sort'] = [$param['order'] => ['order' => 'desc']];
} else {
if (count($or) > 1) {
$params['body']['sort'] = [$or[0]=> ['order' => $or[1]]];
}
}
}
//dump($params);
if (isset($param['limit'])) {
if ((int)$param['limit'] != 0) {
$params['size'] = ((int)$param['limit']-1)*20;
$params['from'] = 1;
} else {
$params['size'] = 20;
$params['from'] = ((int)$param['page']-1)*20;
}
} else { //多局
$params['size'] = 20;
$params['from'] = 1;
}
//dump($params);
//執行檢索
$res = $client->search($params);
$data = ['data' => $res['hits']['hits'], 'num' => $res['hits']['total'],'took'=>$res['took']];
// dump($data);
//返回數據
return $data;
}
public static function get_articles($data){
$client = ClientBuilder::create()->build();
//索引
$params = [
'index' => 'article_journals_index',
'type' => 'article_journals_type',
];
foreach ($data as $k=>$v){
$params['body']['query']['bool']['must']['bool']['should'][]['bool']=['must'=>[['term'=>['id'=>$v['_source']['aiid']]]]];
}
$params['size'] = 20;
$res = $client->search($params);
$arr=$res['hits']['hits'];
//dump($arr);
$arrs=[];
if (!empty($arr)){
foreach ($arr as $k=>$v){
$arrs[$v['_source']['id']]=$v['_source'];
}
}
// dump($arrs);
return $arrs;
}
public static function get_duans($data){
$client = ClientBuilder::create()->build();
//索引
$params = [
'index' => 'ai_index',
'type' => 'ai_type',
];
foreach ($data as $k=>$v){
$params['body']['query']['bool']['must']['bool']['should'][]['bool']=['must'=>[['term'=>['aiid'=>$v['_source']['aiid']]],['term'=>['tag_duan_num'=>$v['_source']['tag_duan_num']]]]];
}
$params['body']['_source'] = ['aiid','content','tag_duan_num'];
$params['size'] = 400;
$res = $client->search($params);
$arr=$res['hits']['hits'];
//dump($arr);
$arrs=[];
if (!empty($arr)){
foreach ($arr as $k=>$v){
$arrs[$v['_source']['aiid']."_".$v['_source']['tag_duan_num']][]=$v['_source']['content'];
}
}
foreach($arrs as $k=>$v){
$arrs[$k]=implode(" ",$v);
}
return $arrs;
}
/**
* @param $data
* @return array
* @author: LuckyHhy <jackhhy520@qq.com>
* @date: 2020/2/24
* @name: getDuans
* @describe:一次性獲取全部段落
*/
public static function getDuans($data){
$client = ClientBuilder::create()->build();
//索引
$params = [
'index' => 'ai_index',
'type' => 'ai_type',
];
foreach ($data as $k=>$v){
$params['body']['query']['bool']['must']['bool']['should'][]['bool']=['must'=>[['term'=>['aiid'=>$v['article_id']]],['term'=>['tag_duan_num'=>$v['tag_duan_num']]]]];
}
$params['body']['_source'] = ['aiid','content','tag_duan_num','duan_num'];
$params['size'] = 400;
$res = $client->search($params);
$arr=$res['hits']['hits'];
$arrs=[];
if (!empty($arr)){
foreach ($arr as $k=>$v){
$arrs[$v['_source']['aiid']."_".$v['_source']['tag_duan_num']][]=$v['_source']['content'];
}
}
foreach($arrs as $k=>$v){
$arrs[$k]=implode(" ",$v);
}
return $arrs;
}
/**
* @param $data
* @return array
* @author: LuckyHhy <jackhhy520@qq.com>
* @date: 2020/2/24
* @name: getStrs
* @describe:
*/
public static function getStrs($data){
$client = ClientBuilder::create()->build();
//索引
$params = [
'index' => 'ai_index',
'type' => 'ai_type',
];
foreach ($data as $k=>$v){
$params['body']['query']['bool']['must']['bool']['should'][]['bool']=['must'=>[['term'=>['aiid'=>$v['article_id']]],['term'=>['tag_duan_num'=>$v['tag_duan_num']]],['term'=>['qw_num'=>$v['qw_num']]]]];
}
$params['body']['_source'] = ['aiid','content','tag_duan_num','qw_num'];
$params['size'] = 40;
$res = $client->search($params);
$arr=$res['hits']['hits'];
$arrs=[];
if (!empty($arr)){
foreach ($arr as $k=>$v){
$arrs[$v['_source']['aiid']."_".$v['_source']['qw_num']][]=$v['_source']['content'];
}
}
foreach($arrs as $k=>$v){
$arrs[$k]=implode(" ",$v);
}
return $arrs;
}
public static function Three_get($key,$param = []){
$arr=[];
foreach ($key as $k=>$v){
$f=self::get_three($v,$param);
//dump($f);
$arr[$k]=$f;
}
return $arr;
}
/**
* @param $key
* @return array
* @author: Jackhhy <jackhhy520@qq.com>
* @name: get_three
* @describe:全文檢索
*/
public static function get_three($key,$param = []){
$client = ClientBuilder::create()->build();
//索引
$params = [
'index' => 'ai_index',
'type' => 'ai_type',
];
$params['body']['query']['bool']['must'][]['bool']['should']['match']['content'] = ['query'=>"$key"];
// IF值查詢
if ((int)$param['if'] != 0) {
$str = "";
switch ((int)$param['if']) {
case 3:
$str = ['gte' => 0, 'lt' => 3];
break;
case 5:
$str = ['gte' => 3, 'lt' => 5];
break;
case 10:
$str = ['gte' => 5, 'lt' => 10];
break;
case 15:
$str = ['gte' => 10, 'lt' => 100];
break;
}
$params['body']['query']["bool"]['must'][]["range"]['current_factor'] = $str;
}
/*分區*/
if ((int)$param['jcr'] != 5) {
$params['body']['query']["bool"]['must'][]["match"]['types_num'] = (int)$param['jcr'];
//$params['body']['query']["bool"]['must'][]["match"]['types_num'] = 1;
}
if (isset($param['end_time']) && $param['end_time'] != 0) {
$y = date("Y", time());
if ($param['end_time'] == 5) { //近五年
$f = $y - 5;
$b = $f."-01-01";
$e = $y."-12-31";
} else {
if ($param['end_time'] == 3) {
$f = $y - 3;
$b = $f."-01-01";
$e = $y."-12-31";
} else {
if ($param['end_time'] == 2) {
$f = $y - 2;
$b = $f."-01-01";
$e = $y."-12-31";
} else {
$b = $param['end_time']."-01-01";
$e = $param['end_time']."-12-31";
}
}
}
$params['body']['query']["bool"]['must'][]["range"]['publication_time'] = [
'from' => "$b",
'to' => "$e",
];
}
if (isset($param['kai_end']) && $param['kai_end'] != 0) {
$xx = @explode("_", $param['kai_end']);
$b = $xx[0]."-01-01";
$e = $xx[1]."-12-31";
if ((int)$param['jcr'] == 5 && (int)$param['if'] == 0) {
$params['body']['query']["bool"]['must'][]["range"]['publication_time'] = [
'from' => "$b",
'to' => "$e",
];
}
}
// dump($params);
//$params['body']['sort'] = ['publication_time' => ['order' => 'desc']];
$params['size'] = 5;
$params['from'] = 1;
//執行檢索
$res = $client->search($params);
$data =$res['hits']['hits'];
//返回數據
return $data;
}
/**
* @param $data
* @param int $size
* @return array
* @author: LuckyHhy <jackhhy520@qq.com>
* @date: 2020/1/6
* @name: coolect_article
* @describe:
*/
public static function coolect_article($data,$size=20){
$client = ClientBuilder::create()->build();
//索引
$params = [
'index' => 'article_journals_index',
'type' => 'article_journals_type',
];
foreach ($data as $k=>$v){
$params['body']['query']['bool']['must']['bool']['should'][]['bool']=['must'=>[['term'=>['id'=>$v['article_id']]]]];
}
$params['size'] = $size;
$res = $client->search($params);
$arr=$res['hits']['hits'];
//dump($arr);
$arrs=[];
if (!empty($arr)){
foreach ($arr as $k=>$v){
$arrs[$v['_source']['id']]=$v['_source'];
}
}
// dump($arrs);
return $arrs;
}
/**
* @param $duan_num
* @return string
* @author: Jackhhy <jackhhy520@qq.com>
* @name: get_duan
* @describe:獲取段落
*/
public static function get_duan($duan_num,$aiid){
$client = ClientBuilder::create()->build();
//索引
$params = [
'index' => 'ai_index',
'type' => 'ai_type',
];
$params['body']['query']['bool']['must'][]['match']['tag_duan_num'] = $duan_num;
$params['body']['query']['bool']['must'][]['match']['aiid'] = $aiid;
$params['size'] = 60;
//執行檢索
$res = $client->search($params);
$str='';
if (!empty($res['hits']['hits'])){
foreach ($res['hits']['hits'] as $k=>$v){
$str.=''.$v['_source']['content'];
}
}
return $str;
}
}
`
- 空白目錄
- thinkphp5
- tools-常用類庫
- redis類庫
- Excel類庫
- File文件操作類庫
- Http請求類庫
- Maile郵件發送
- Hooks行為鉤子
- 七牛云
- 隨機數和字符串生成
- 字符串處理
- 時間類處理
- tree型轉換
- 工具類庫
- 文件打包下載
- 常用功能
- 文件上傳
- php生成word文檔
- elasticsearch 基本搜索
- 使用jwt開發API接口
- 安裝模及搭建
- ApiCheck.php
- ApiCheckLogin.php
- common.php
- Login.php
- Comment.php
- 漢字轉拼音
- 安裝使用
- Pinyin類
- elasticsearch操作
- 常用方法
- 數據源生成layui-select
- 獲取自定義配置項
- 百度編輯器
- 格式化文件大小
- 多語言設置
- hook監聽
- 域名綁定到模塊
- thinkphp6
- 文件上傳
- tp5totp6
- 創建路徑
- 獲取類所有方法
- password_hash加密驗證
- 生成 qrcode
- 郵件發送
- 獲取QQ信息
- GoogleAuthenticator
- redis限流
- redis 加鎖
- 百度翻譯
- QueryList爬取數據
- 獲取時間類
- 命令
- Git常用命令
- easyswoole
- pix_qrcode
- 驗證 cpf,cnpj
- php常用方法
- 日志
- 卡通頭像
- 兩位小數
- 圖片轉base64
- auth加密解密
- phpoffice/phpspreadsheet導入導出
- fastadmin
- 樹結構
- 單選框
- 復選框
- 二級搜索
- select選擇框
- selectpage選中回調事件
- 標簽添加
- 修改where條件
- 表格列表中添加input框
- selectpage事件
- fieldlist
- js操作
- test_js
- 多表格
- template模板