此处用的是yii2 高级版

1: 配置 : common/config/main.php

    'components' => ['elasticsearch' => ['class' => 'yii\elasticsearch\Connection','nodes' => [['http_address' => '192.168.101.5:9200'],// configure more hosts if you have a cluster],'dslVersion' => 7, // default is 5'autodetectCluster' => false],],

2: 类封装

<?php
/***  * @file ConsultingService.php* @author * @version 1.0* @date 2021-07-15*/namespace common\tools\es;use frontend\models\ConsultingService;
use frontend\models\QuestionAsk;
use yii\elasticsearch\ActiveRecord;
use yii\data\Pagination;
use yii\helpers\ArrayHelper;class ConsultingService extends ActiveRecord
{/*** 数据库*/public static function getDb(){return \Yii::$app->get('elasticsearch');}/*** 索引*/public static function index(){return 'consulting_service';}/*** 设置索引别名*/public static function alias(){return 'consulting_service_new';}/*** 类型*/public static function type(){return '_doc';}/*** 返回字段*/public function attributes(){$mapConfig = self::mapConfig();return array_keys($mapConfig['properties']);}/*** 映射配置*/public static function mapConfig(){return ['properties' => ['id' => ['type' => 'integer'],  //问题的id'department_category_id' => ['type' => 'integer'], //科室分类的id'title' => ['type' => 'text', 'analyzer' => "ik_max_word"], //咨询的问题标题'description' => ['type' => 'text', 'analyzer' => "ik_max_word"], //问题描述]];}/*** 设置映射*/public static function mapping(){return self::mapConfig();}/*** 获取映射*/public static function getMapping(){$db = self::getDb();$command = $db->createCommand();return $command->getMapping(static::index());}/*** 更新映射*/public static function updateMapping(){$db = self::getDb();$command = $db->createCommand();if (!$command->indexExists(self::index() . '_' . date('d'))) {return $command->createIndex(self::index() . '_' . date('d'), ['mappings' => static::mapping(),]);} else {return $command->setMapping(self::index() . '_' . date('d'), '', self::mapping());}}/*** 更新别名指向*/public static function updateAlias(){$db = self::getDb();$command = $db->createCommand();$alias = $command->getAliasInfo();$currentIndex = key($alias);$result = $command->addAlias(self::index() . '_' . date('d'), self::alias());if ($currentIndex) {$result = $command->removeAlias($currentIndex, self::alias());}return $result;}/*** 创建索引*/public static function createIndex(){$db = static::getDb();$command = $db->createCommand();$result = $command->createIndex(static::index(), ['mappings' => static::mapping(),]);return $result;}/*** 删除索引*/public static function deleteIndex(){$db = static::getDb();$command = $db->createCommand();$result = $command->deleteIndex(static::index());return $result;}/*** 获取医院详情*/public function getDetail($consulting_id, $fields = []){if (!empty($fields)) {return self::find()->select($fields)->where(['id' => $consulting_id])->asArray()->one();}return self::find()->where(['id' => $consulting_id])->asArray()->one();}/*** 根据问题ID将问题数据插入ES中*/public function insertToEs($ask_id){$consultingInfo = ConsultingService::find()->where(['id' => $ask_id])->asArray()->one();if (!empty($consultingInfo)) {try {$consultingEsModel = new self();$consultingEsModel->setPrimaryKey($consultingInfo['id']);$consultingEsModel->setAttribute('id', $ask_id);$consultingEsModel->setAttribute('department_category_id', trim($consultingInfo['department_category_id']));$consultingEsModel->setAttribute('title', $this->filterText($consultingInfo['title']));$consultingEsModel->setAttribute('description', $this->filterText($consultingInfo['description']));$consultingEsModel->save();} catch (\Exception $e) {return ['code' => 0, 'msg' => $e->getMessage()];}} else {return ['code' => 0, 'msg' => '咨询实录问题不存在,插入ES失败!'];}return ['code' => 1, 'msg' => '咨询实录问题信息插入ES成功!'];}/*** 更新ES中医生数据*/public function updateToEs($consulting_id){$consultingEsModel = self::get($consulting_id);//如果不存在就插入ESif (is_null($consultingEsModel)) {return $this->insertToEs($consulting_id);} else {$consultingInfo = ConsultingService::find()->where(['id' => $consulting_id])->asArray()->one();try {$consultingEsModel->setAttribute('id', $consulting_id);$consultingEsModel->setAttribute('department_category_id', trim($consultingInfo['department_category_id']));$consultingEsModel->setAttribute('title', $this->filterText($consultingInfo['title']));$consultingEsModel->setAttribute('description', $this->filterText($consultingInfo['description']));$consultingEsModel->save();} catch (\Exception $e) {return ['code' => 0, 'msg' => $e->getMessage()];}return ['code' => 1, 'msg' => '问题更新ES成功!'];}}/*** 从ES中删除数据*/public function deleteFromEs($consulting_id){return self::find()->where(['id' => $consulting_id])->delete();}/*** 初始化时跑数据*/public function initEsData($consulting_id){$consultingInfo = ConsultingService::find()->where(['id' => $consulting_id])->asArray()->one();//组合数据$data = [];$data['id'] = $consulting_id;$data['department_category_id'] = intval($consultingInfo['department_category_id']);$data['title'] = $this->filterText($consultingInfo['title']);$data['description'] = $this->filterText($consultingInfo['description']);$db = self::getDb();$command = $db->createCommand();$res = $command->insert(self::index() . '_' . date('d'), '_doc', $data, $consulting_id);return $res;}/*** 过滤文本*/private function filterText($content){//过滤标签空格$contentStr = preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", "", strip_tags($content));//过滤字符串中的\r\n 以及转义字符$contentStr = stripslashes(str_replace(array("\r\n", "\r", "\n"), "", $contentStr));return strval(trim($contentStr));}
}

Yii2 Elasticsearch 操作Demo相关推荐

  1. 通过Spring Data Elasticsearch操作ES

    Elasticsearch Elasticsearch (ES)是一个基于Lucene构建的开源.分布式.RESTful 接口全文搜索引擎.Elasticsearch 还是一个分布式文档数据库,其中每 ...

  2. ElasticSearch插件demo

    环境: 操作系统:win7 elasticsearch版本:5.4.4 java:1.8 参考文章: 1.Elasticsearch权威指南(中文版) 2.Elasticsearch笔记五之java操 ...

  3. yii2-elasticsearch(3)yii2 elasticsearch 的初步尝试

    配置 return [//....'components' => ['elasticsearch' => ['class' => 'yii\elasticsearch\Connect ...

  4. 【ELK】ElasticSearch插件demo

    环境: 操作系统:win7 elasticsearch版本:5.4.4 java:1.8 参考文章: 1.Elasticsearch权威指南(中文版) 2.Elasticsearch笔记五之java操 ...

  5. Elasticsearch入门Demo(一)

    1.创建一个Maven工程,在pom.xml中添加如下代码: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...

  6. win32 htmlayout dom操作demo

    之前两篇关于win32 htmlayout博文,记载了一个实现了简单的点击按钮弹出新窗口的demo,之后实践中发现,图形界面开发,最重要的还是要实现响应用户操作,改变原有界面的功能.比如说,界面上有一 ...

  7. 最清晰易懂的Elasticsearch操作手册|收藏夹必备

    写在前面:我是「且听风吟」,目前是一名大数据开发工程师,热爱大数据开源技术,喜欢分享自己的所学所悟,现阶段正在从头梳理大数据体系的知识,以后将会把时间重点放在Spark和Flink上面. 如果你也对大 ...

  8. elasticsearch操作

    添加 类型为employee,该类型位于索引megacorg,每个雇员索引一个文档,该文档包含该雇员的全部信息(面向文档),该雇员的id为1 需要index.type.id curl -X PUT - ...

  9. 【项目经验】最新最全ElasticSearch操作详解

    文章目录 一.引言 1.1 海量数据 1.2 全文检索 1.3 高亮显示 二.ES概述 2.1 ES的介绍 2.2 ES的由来 2.3 ES和Solr 2.4 倒排索引 三. ElasticSearc ...

最新文章

  1. 如何解决盗版Windows问题
  2. [CF413D]2048
  3. pytorch无法下载或下载缓慢问题
  4. [No0000111]java9环境变量配置bat
  5. matlab入门之旅,MATLAB 入门之旅学习笔记
  6. 伪静态 apache重写
  7. [数据库笔记]规范化(Normalization)-把数据冗余降下来
  8. python numba 转灰度图_Python数据预处理:Dask和Numba并行化加速!
  9. java中的@param参数_java – @RequestParam在Spring MVC中处理可选参数
  10. Alien Skin Exposure X6 mac汉化免费插件包胶片滤镜新功能介绍
  11. 【C/C++】BOOST 线程完全攻略 - 基础篇
  12. BZOJ1878 [SDOI2009]HH的项链
  13. 第33期、基于java的网上订餐管理系统
  14. 联想拯救者笔记本摄像头打不开
  15. HTTP 401和403区别
  16. IDEA插件系列(67):ReadHub插件——新闻阅读器
  17. 《精彩网址大全——工商经济科学教育卷》内容简介
  18. 头肩模拟器在免提或头戴式终端测试中的应用
  19. 云风skynet-如何用skynet手撕万人同时在线游戏丨actor模型详解
  20. 数据库学习笔记第一弹——MySQL8.0和MySQL5.7的下载、安装与配置(图文详解步骤2022)

热门文章

  1. SEO优化之og:标签
  2. POJ1251丛林之路题解
  3. ios12 siri 语音识别
  4. Virtualbox centos虚拟机网络互联总结
  5. 网络安全产品之堡垒机介绍以及应用案例
  6. MacW资讯:开启Mac的壁纸自动更换功能
  7. 希尔顿旗下酒店于不同城市推出餐饮外卖、连住套餐、星厨上门、户外野餐等无忧安心产品...
  8. 初学python找不到的类都到这儿来
  9. Redis 进阶篇:发布订阅模式原理与运用
  10. Echarts角锥柱形图