核心代码

<?php
/*** Created by.* User: Jim* Date: 2020/11/11* Time: 12:18*/namespace app\lib\search;use Elasticsearch\ClientBuilder;
use think\Controller;
use think\Db;/*** elasticsearch 产品搜索* Class Es* @package app\lib\search*/
class Es extends Controller
{static $instance = null;static $index_es = 'goods_es';static $type_es = 'goods_es';static $prefix = 'goods_';private $client = null;protected function initialize(){parent::initialize(); // TODO: Change the autogenerated stub$params = ['127.0.0.1:9200',];$this->client = ClientBuilder::create()->setHosts($params)->build();}private function __clone(){// TODO: Implement __clone() method.}public static function getInstance(){if (self::$instance == null) {self::$instance = new self;}return self::$instance;}/*** 功能:生成索引*/public function index(){set_time_limit(0);/*** 添加 删除 修改的时候 都进行更新索引值*/$where['is_del'] = 0;$where['for_au'] = 1;$lists = Db::name('goods')->where($where)->field('id,product_code title,product_name content')->select();foreach ($lists as $row) {$params = ['body' => ['id' => $row['id'],'title' => $row['title'],'content' => $row['content']],'id' => 'goods_' . $row['id'],'index' => self::$index_es,'type' => self::$type_es];$this->client->index($params);}echo 'create index success';}/*** 获取索引*/public function getIndex($name = ''){try {$params = ['index' => self::$index_es,'type' => self::$type_es,'id' => self::$prefix . $name,];$res = $this->client->get($params);return $res;} catch (\Exception $e) {echo $e->getMessage();}}/*** 更新索引*/public function updateIndex($id, $data = []){// 每次更新数据的时候   只要for_au == 1 然后更新数据就OKif (empty($id) || empty($data)) {return false;}$data = ['index' => self::$index_es,'type' => self::$type_es,'id' => $id,'body' => ['doc' => $data //这里的data是个一维关联数组,和常用的ORM更新方法参数一致。]];try {$res = $this->client->update($data);return $res['result'];} catch (\Exception $e) {return false;}}/*** 从索引中删除文档* @param string $name* @return bool*/public function delIndex($name = ''){$params = ['index' => self::$index_es,'type' => self::$type_es,'id' => self::$prefix . $name,];try {$res = $this->client->delete($params);return true;} catch (\Exception $e) {return '';}}/*** 查询* 返回的时候goods查询的sql 语句* return String `goods_id in (1,2,3,4)`  or ''*/public function search($keyword = ''){$keyword = trim($keyword);if (!$keyword) return '';$params = ['index' => self::$index_es,'type' => self::$type_es,'size' => 1000,'body' => ['query' => ['bool' => ['should' => [['match' => ['title' => ['query' => $keyword, 'fuzziness' => 'AUTO', 'operator' => 'or',]]],['match' => ['content' => ['query' => $keyword, 'fuzziness' => 'AUTO', 'operator' => 'or',]]],]]]]];try {$res = $this->client->search($params);$goods = $res['hits']['hits'];$goods = array_column($goods, '_source');$goods = array_column($goods, 'id');$ids_str = implode(',',$goods);if ($ids_str == '') return '';// id in (1,2,4,5);return "goods.id in ({$ids_str})";} catch (\Exception $e) {return '';}}}

使用

 // es 搜索$es_where = '';try {$es_where = Es::getInstance()->search($keyword);} catch (\Exception $e) {}// goods_id in (1,2,3,4,5);dump($es_where);

thinkph5.1 + es相关推荐

  1. Android OpenGL ES(十一)绘制一个20面体 .

    前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形.其它所有复杂的2D或3D图形都是由这些基本图形构成. 本例介绍如何使用三角形构造一个正20面体.一个正20面体,有12个顶点,20 ...

  2. es日期format_elasticsearch存储日期格式字段

    elasticsearch创建index之后,可以设置mapping,如果mapping中没有设置date的format,那么默认为两种格式: date_optional_time 此格式为ISO86 ...

  3. data es集群master_Kubernetes Helm3 部署 ElasticSearch amp; Kibana 7 集群

    一.简介 Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索.结构化检索和分析,并能将这三者结合起来.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,轻松扩 ...

  4. ES集群状态、节点、索引等查看及根据字段、排序查询

    ES集群基础: 1. 查看集群: http://172.xxx.xxx.8:9200 2. 查看状态: http://172.xxx.xxx.8:9200/_cat/health?v 3. 查看索引: ...

  5. ES单字段支持的最大字符数

    在使用ES时,需要用到进行检索的字段都需设置为 keyword,不需要检索的可以设置 text. 设置keyword,默认不分词,它的最大长度和utf-8编码有关,最大长度为32766字节,如果字段长 ...

  6. ES强制删除docs.deleted 标记的文档 document

    ES查看集群状态.节点.索引等及基本查询 ES会产生一些 docs.deleted 的数据如下图,怎么彻底删除呢? 删除数据的时候:可以使用_delete_by_query,然而这并不彻底. 只是逻辑 ...

  7. es安装的时候遇到的所有的坑

    不允许root用户启动. 解决办法,创建子用户. 在linux下需要注意.es默认不能用root用户启动.我们需要新建一个用户来启动. groupadd  es adduser  es-user    ...

  8. 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数

    1.                 打开Eclipse,File-->New-->Project--->Android-->AndroidApplication Projec ...

  9. es父子结构查询_ES 父子文档查询

    父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...

最新文章

  1. MC, MCMC, Gibbs采样 原理实现(in R)
  2. 树莓派学习——文件传输
  3. JAVA可阻塞队列-ArrayBlockingQueue
  4. java 多线程基础(一)
  5. Linux操作Oracle(8)——Oracle数据库迁移全纪录(1) — 表空间 用户 权限迁移
  6. paip.c++ qt messagebox用法
  7. kdiff3的主窗口说明 Base Local Remote 分别代表什么分支
  8. 三國演義與三國志兩部文本的導讀概要2019年5月11日
  9. CMD命令下载远程文件
  10. 反射在Java编程中的应用
  11. Criteria用法的小结
  12. openssl HeartBleed漏洞复现
  13. http://wenku.baidu.com/view/1ee32e3a87c24028915fc362.html?re=view###
  14. 【文末福利】用Python画了一幅《海上生明月》的画
  15. 屏幕分辨率 VGA、HVGA、QVGA、WVGA、WQVGA
  16. 一个“良心未泯”的国产敲诈者病毒分析
  17. 基于KITTI数据集的无人驾驶感知与传感器融合实现—(0)—照猫画虎
  18. 监督学习——支持向量机(Support Vector Machine--SVM)
  19. 非接触式地表激光裂缝监测仪
  20. 我的保研路——夏令营

热门文章

  1. 屏幕测试图片全屏_全屏视频测试
  2. 2019python二级考试报名时间_2019湖北计算机二级考试(时间 科目 报名方法)
  3. Java项目论文+中期检查+PPT+源码等]S2SH+mysql城市公交管理系统
  4. 计算机组装高考真题,春季高考信息技术模拟题3(计算机组装与维修部分含答案)...
  5. AI 边缘计算平台 - 爱芯元智 AX620A 爱芯派开箱
  6. 内网渗透系列:内网信息搜集方法小结2
  7. AI Earth 开发者模式—— 如何加载影像?以Landsat 5 影像为例
  8. 基于java的毕业论文在线选题指导系统
  9. Jq实现刷新页面更换广告的简单效果
  10. 惠普HP DesignJet T1708 打印机驱动