热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

thinkph5.1+es

主题列表:juejin,github,smartblue,cyanosis,channing-cyan贡献主题:https:github.comxitujuejin-markdow






主题列表:juejin, github, smartblue, cyanosis, channing-cyan
贡献主题:https://github.com/xitu/juejin-markdown-themes

theme: juejin
highlight: juejin


核心代码

/**
* 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 然后更新数据就OK
if (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);


推荐阅读
  • 解决针织难题:R语言编程技巧与常见错误分析 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 在更换电脑后,使用 Git Bash 运行 Python 时可能会遇到找不到 Python 解释器的问题。本文详细介绍了如何在 Windows 环境下通过 Bash Shell 调用不同版本的 Python,并成功运行 SRSPlayer HTTP 服务器。具体步骤包括配置环境变量、验证 Python 版本以及启动服务器的方法。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 在安装 iOS 开发所需的 CocoaPods 时,用户可能会遇到多种问题。其中一个常见问题是,在执行 `pod setup` 命令后,系统无法连接到 GitHub 以更新 CocoaPods/Specs 仓库。这可能是由于网络连接不稳定、GitHub 服务器暂时不可用或本地配置错误等原因导致。为解决此问题,建议检查网络连接、确保 GitHub API 限制未被触发,并验证本地配置文件是否正确。 ... [详细]
  • Git核心命令全解析:掌握日常开发必备技能
    本文深入解析了 Git 的核心命令,帮助开发者掌握日常开发中的必备技能。从 `git init` 命令开始,介绍了如何将当前目录转变为 Git 可管理的仓库。接着详细讲解了 `git add` 命令的使用方法,包括如何将文件(如 `readme.txt`)添加到暂存区,以便在后续提交时进行版本控制。此外,还探讨了其他关键命令,如 `git commit` 和 `git push`,以确保代码变更能够安全地保存和同步到远程仓库。通过这些命令的综合应用,开发者可以更加高效地管理和协作项目。 ... [详细]
  • 本文详细介绍了在 Android 7.1 系统中调整屏幕分辨率和默认音量设置的方法。针对系统默认音量过大的问题,提供了具体的步骤来降低系统、铃声、媒体和闹钟的默认音量,以提升用户体验。此外,还涵盖了如何通过系统设置或使用第三方工具来优化屏幕分辨率,确保设备显示效果更加清晰和流畅。 ... [详细]
  • 如何在任意浏览器中轻松安装并使用VSCode——Codeserver简易指南
    code-server 是一款强大的工具,允许用户在任何服务器上部署 VSCode,并通过浏览器进行访问和使用。这一解决方案不仅简化了开发环境的搭建过程,还提供了高度灵活的工作方式。用户只需访问 GitHub 上的官方仓库(GitHub-coder/code-server),即可获取详细的安装和配置指南,快速启动并运行 code-server。无论是个人开发者还是团队协作,code-server 都能提供高效、便捷的代码编辑体验。 ... [详细]
  • 在使用 PyCharm Professional 2019.1 版本创建 Markdown 文件时,部分用户遇到了软件无响应的问题。本文详细分析了该问题的原因,并提供了有效的解决方法。通过调整配置文件和优化环境设置,可以显著改善软件的稳定性和响应速度。建议用户参考相关技术博客中的具体步骤进行操作。 ... [详细]
  • 精选了8个免费下载学术论文的平台,旨在为研究者提供便捷的文献获取渠道。这些资源不仅有助于提升科研效率,还能促进知识的广泛传播。其中,Library Genesis 以“无版权限制的知识共享”为目标,提供了大量学术资料。其他平台还包括 JSTOR、PubMed Central、arXiv 等,各具特色,满足不同学科的需求。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdownAERandomChar.md相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
白羊幸福的佳佳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有