我的编程空间,编程开发者的网络收藏夹
学习永远不晚

thinkphp中使用Elasticsearch 7.0进行多表的搜索

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

thinkphp中使用Elasticsearch 7.0进行多表的搜索

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:thinkphp中使用Elasticsearch 7.0进行多表的搜索:

thinkphp数据库配置文件

 // Elasticsearch数据库配置信息        'elasticsearch' => [            'scheme' =>'http',            'host' => '127.0.0.1',            'port' => '9200',            'user' => '',            'pass' => '',            'timeout' => 2,        ],

提示:以下是本篇文章正文内容,下面案例可供参考

一、thinkphp中使用Elasticsearch 7.0进行多表的搜索

示例:thinkphp中使用Elasticsearch 7.0进行多表的搜索

二、使用步骤

1.引入库

直接上代码如下(示例):

composer require "elasticsearch/elasticsearch": "7.0.*"

2.读入数据

代码如下(示例):

namespace app\common\model;use think\facade\Db;use think\Model;use Elasticsearch\ClientBuilder;class Article extends Model{    protected $client;    public function __construct($data = [])    {        parent::__construct($data);        try {            $this->client = ClientBuilder::create()                ->setHosts([config('database.connections.elasticsearch.host') . ':' . config('database.connections.elasticsearch.port')])                ->build();        } catch (\Exception $e) {            // 输出连接错误信息            echo $e->getMessage();            exit;        }    }    // 添加文档到Elasticsearch    public function addDocument()    {        $articles = Db::name('article')->select();        foreach ($articles as $article) {            $data = [                'id' => $article['id'], // 文章表的 ID                'title' => $article['title'],                'content' => $article['content'],                'category_id' => $article['category_id'], // 文章表的 ID            ];            $params = [                'index' => 'articles', // 索引名称                'id' => $data['id'], // 文章 ID 作为文档的唯一标识                'body' => $data,            ];            $response = $this->client->index($params);        }        return $response;    }    // 搜索文档    public function searchDocuments($index,$query)    {        $params = [            'index' => $index,            'body' => [                'query' => [                    'multi_match' => [                        'query' => $query,                        'fields' => ['title', 'content'],                    ],                ],            ],        ];        $response = $this->client->search($params);        return $response;    }}
namespace app\common\model;use think\facade\Db;use think\Model;use Elasticsearch\ClientBuilder;class Book extends Model{    protected $client;    public function __construct($data = [])    {        parent::__construct($data);        try {            // $host = config('database.connections.elasticsearch.host');            // $port = config('database.connections.elasticsearch.port');            $this->client = ClientBuilder::create()                ->setHosts([config('database.connections.elasticsearch.host') . ':' . config('database.connections.elasticsearch.port')])                ->build();        } catch (\Exception $e) {            // 输出连接错误信息            echo $e->getMessage();            exit;        }    }    // 添加文档到Elasticsearch    public function addDocument()    {        $books = Db::name('book')->select();        foreach ($books as $book) {            $data = [                'id' => $book['id'], // 书籍表的 ID                'user_id' => $book['user_id'], // 书籍表作者ID                'book' => $book['book'],            ];            $params = [                'index' => 'books', // 索引名称                'id' => $data['id'], // 文章 ID 作为文档的唯一标识                'body' => $data,            ];            $response = $this->client->index($params);        }        return $response;    }    // 搜索文档    public function searchDocuments($index,$query)    {        $params = [            'index' => $index,            'body' => [                'query' => [                    'multi_match' => [                        'query' => $query,                        'fields' => ['book'],                    ],                ],            ],        ];        $response = $this->client->search($params);        return $response;    }}
namespace app\common\model;use think\Model;use Elasticsearch\ClientBuilder;class ElasticsearchModel extends Model{    protected $client;    public function __construct($data = [])    {        parent::__construct($data);        try {            $this->client = ClientBuilder::create()                ->setHosts([config('database.connections.elasticsearch.host') . ':' . config('database.connections.elasticsearch.port')])                ->build();        } catch (\Exception $e) {            // 输出连接错误信息            echo $e->getMessage();            exit;        }    }    public function globalSearch($keyword)    {        // 搜索articles索引        $articles = $this->searchIndex('articles', $keyword);        // 搜索books索引        $books = $this->searchIndex('books', $keyword);        // 合并搜索结果        $result = array_merge($articles, $books);        return $result;    }    protected function searchIndex($index, $keyword)    {        $params = [            'index' => $index,            'body' => [                'query' => [                    'multi_match' => [                        'query' => $keyword,                        'fields' => ['title', 'content','book'],                    ],                ],            ],        ];        // 执行搜索请求        $response = $this->client->search($params);        // 解析结果        $result = [];        if (isset($response['hits']['hits'])) {            foreach ($response['hits']['hits'] as $hit) {                $result[] = $hit['_source'];                $result['index'] = $index;            }        }        return $result;    }}
namespace app\index\controller;use app\common\model\ElasticsearchModel;class SearchController{//全局搜索个表间的数据    public function search($keyword)    {        $searchModel = new ElasticsearchModel();        $result = $searchModel->globalSearch($keyword);        return json($result);    }}
namespace app\index\controller;use app\BaseController;use app\common\model\Article as ElasticArticle;use app\common\model\Book as ElasticBook;use app\Request;use Elasticsearch\ClientBuilder;class Demo1 extends BaseController{//新增索引,建议在模型中新增 ,删除, 修改 或者使用观察者模式更新ES索引 public function addDocument()    {        $elasticsearchArticle = new ElasticArticle();        $response = $elasticsearchArticle->addDocument();        $elasticsearchBook = new ElasticBook();        $response1 = $elasticsearchBook->addDocument();        return json($response);        // print_r(json($response));        // print_r(json($response1));    }     public function search(Request $request)    {        $keyword = $request->param('keyword');        $elasticsearchModel = new ElasticArticle();        $index = 'articles';        $query = '你';        $response = $elasticsearchModel->searchDocuments($index, $query);        return json($response);    }//单独搜搜书籍表    public function searchBook(Request $request)    {        $keyword = $request->param('keyword');        $elasticsearchModel = new ElasticBook();        $index = 'books';        $query = '巴黎';        $response = $elasticsearchModel->searchDocuments($index, $query);        return json($response);    }    public function deleteIndex()    {        $client = ClientBuilder::create()->build();        $params = [            'index' => 'my_index', // 索引名称        ];        $response = $client->indices()->delete($params);        if ($response['acknowledged']) {            return '索引删除成功';        } else {            return '索引删除失败';        }    }}

使用的表

CREATE TABLE `article` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `category_id` int(11) DEFAULT NULL,  `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `content` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=107 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;CREATE TABLE `book` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `user_id` int(11) DEFAULT NULL,  `book` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;CREATE TABLE `elasticsearch_model` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `model_name` varchar(255) NOT NULL DEFAULT '' COMMENT '模型名称',  `index_name` varchar(255) NOT NULL DEFAULT '' COMMENT '索引名称',  `created_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',  `updated_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',  PRIMARY KEY (`id`),  UNIQUE KEY `index_name_unique` (`index_name`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='Elasticsearch 模型配置表';

结果
在这里插入图片描述
在这里插入图片描述

windwos 上记住 安装 Elasticsearch 7.0 库, 和 kibana-7.0.0-windows-x86_64 图像管理工具
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结

提示:这是简单例子, 注意’fields’ => [‘title’, ‘content’], 尝试使用搜索number型字段,索引报错, 貌似只支持txt类型字段搜索
例如:以上就是今天要讲的内容,本文仅仅简单介绍了Elasticsearch的使用

来源地址:https://blog.csdn.net/qq_27878777/article/details/132643924

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

thinkphp中使用Elasticsearch 7.0进行多表的搜索

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在Oracle表中进行关键词搜索的过程

目录在Oracle表中的关键词搜索在Oracle数据库中,我们可以很容易地在模式内的表中找到我们正在寻找的文本或关键词。结果部分。在Oracle表中的关键词搜索在Oracle数据库中,我们可以很容易地在模式内的表中找到我们正在寻找的文本或
2022-06-13

Elasticsearch分布式搜索中的滚动更新与索引重建(Elasticsearch如何进行滚动更新和索引重建?)

滚动更新和索引重建是Elasticsearch管理分布式搜索集群中的索引更改的两种策略。滚动更新涉及逐步更新索引分片,在更新过程中保持集群可用。它适用于需要无停机时间、可扩展性和可靠性的场景。索引重建涉及一次性创建和重建新索引。它更简单、更快,并确保数据一致性。但是,它会导致停机时间和数据丢失风险。选择最合适的策略取决于特定用例的需求,例如停机时间、可扩展性、可靠性、简单性、性能和数据一致性。
Elasticsearch分布式搜索中的滚动更新与索引重建(Elasticsearch如何进行滚动更新和索引重建?)
2024-04-02

Elasticsearch分布式搜索中的安全与加密通信(如何保障Elasticsearch分布式搜索的安全并进行加密通信?)

本文介绍了保障Elasticsearch分布式搜索系统安全的最佳实践和加密通信方法。通过实施认证、授权、网络安全、数据加密、审计和备份,可以有效防范数据泄露和未经授权访问。加密通信采用TLS/SSL、IPSecVPN和SSH隧道等方法,确保数据在传输过程中得到保护。具体的实施步骤包含身份验证、防火墙配置、数据分片加密、日志记录、备份和TLS/SSL部署等。通过这些措施,Elasticsearch分布式搜索系统的安全性得到显著增强,降低了数据泄露和未经授权访问的风险。
Elasticsearch分布式搜索中的安全与加密通信(如何保障Elasticsearch分布式搜索的安全并进行加密通信?)
2024-04-02

Elasticsearch分布式搜索引擎在知识图谱构建中的应用(如何利用Elasticsearch进行分布式知识图谱的构建与搜索?)

Elasticsearch作为分布式搜索引擎,在知识图谱构建中发挥关键作用,包括索引知识图谱数据、分布式索引、知识图谱构建和知识图谱搜索。其可扩展性、分布式特性、灵活的索引方案和强大的搜索功能使其成为构建语义丰富知识库的理想选择,应用于生物医学、金融、电子商务、自然语言处理和科学研究等广泛领域。
Elasticsearch分布式搜索引擎在知识图谱构建中的应用(如何利用Elasticsearch进行分布式知识图谱的构建与搜索?)
2024-04-02

Elasticsearch分布式搜索引擎在大数据场景下的应用(大数据场景下如何应用Elasticsearch进行分布式搜索?)

Elasticsearch作为分布式搜索引擎,在大数据场景下提供分布式索引和搜索、可扩展性、容错性、实时索引、全文搜索等优势。具体应用包括日志分析、应用程序性能监控、电子商务搜索、社交媒体分析和机器学习集成。最佳实践包括选择合适的文档类型、优化索引设置、使用文档映射、进行性能调整、使用快照和备份。
Elasticsearch分布式搜索引擎在大数据场景下的应用(大数据场景下如何应用Elasticsearch进行分布式搜索?)
2024-04-02

利用Elasticsearch实现大规模分布式搜索的解决方案(大规模数据下如何应用Elasticsearch进行分布式搜索?)

利用Elasticsearch实现大规模分布式搜索的解决方案:Elasticsearch通过分片和副本将搜索请求分布到多个节点,提高并发性和容错能力。集群管理功能简化了管理,自动检测故障并平衡负载。近实时搜索和高级搜索功能满足复杂查询和用例需求。Elasticsearch具有高可扩展性和容错能力,适用于大型分布式搜索场景,如电子商务、日志分析、安全分析等。
利用Elasticsearch实现大规模分布式搜索的解决方案(大规模数据下如何应用Elasticsearch进行分布式搜索?)
2024-04-02

怎么使用Marketing Cloud的扩展字段作为搜索条件进行搜索

本篇文章为大家展示了怎么使用Marketing Cloud的扩展字段作为搜索条件进行搜索,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。需求:我在Marketing Cloud的contact模型上用
2023-06-04

Elasticsearch分布式搜索中的数据分片与路由机制(Elasticsearch如何进行数据分片与路由以实现分布式搜索?)

Elasticsearch通过分片将大型索引分割为较小的块,并通过路由机制确定每个文档存储的分片。分片提高了可扩展性、容错性和查询性能,而路由确保文档正确存储和检索。分片数量和副本分片数量根据索引大小和预期负载而异。通过优化分片和路由策略,组织可以最大化Elasticsearch的性能和可靠性。
Elasticsearch分布式搜索中的数据分片与路由机制(Elasticsearch如何进行数据分片与路由以实现分布式搜索?)
2024-04-02

跳过正则表达式字符,直到使用 golang 进行搜索

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《跳过正则表达式字符,直到使用 golang 进行搜索》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮
跳过正则表达式字符,直到使用 golang 进行搜索
2024-04-04

Python使用Selenium自动进行百度搜索的实现

目录安装 Selenium写代码点位网页元素我们今天介绍一个非常适合新手的python自动化小项目,项目虽小,但是五脏俱全。它是一个自动化操作网页浏览器的小应用:打开浏览器,进入百度网页,搜索关键词,最后把搜索结果保存到一个文件里。这个例子
2022-06-02

怎么使用ABAP Restful API进行代码的全文搜索

这篇文章主要介绍“怎么使用ABAP Restful API进行代码的全文搜索”,在日常操作中,相信很多人在怎么使用ABAP Restful API进行代码的全文搜索问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-06-04

PHP如何使用回调执行正则表达式搜索,并使用多字节支持替换

PHP正则表达式提供强大的匹配和替换功能,可使用回调函数自定义匹配和替换行为。通过preg_replace_callback函数使用回调函数,开发者可细粒度控制匹配内容。此外,PHP支持多字节字符集,可处理非ASCII字符,通过u修饰符启用多字节支持,可与回调函数结合使用,实现复杂正则表达式搜索和替换操作。
PHP如何使用回调执行正则表达式搜索,并使用多字节支持替换
2024-04-02

Java如何使用回调执行正则表达式搜索,并使用多字节支持替换

Java使用回调执行正则表达式搜索,允许自定义匹配处理。通过Pattern.compile编译正则表达式,Matcher.find应用模式,Matcher.replaceAll执行回调进行自定义替换。多字节支持可处理多字节字符。回调优势包括自定义替换逻辑、多字节支持和代码可重用性。
Java如何使用回调执行正则表达式搜索,并使用多字节支持替换
2024-04-02

利用Solr实现大规模数据搜索的解决方案(大数据场景下如何使用Solr进行搜索?)

Solr是一款强大的企业级搜索平台,在处理大规模数据搜索时,它提供分布式架构、自动分片和复制机制,可实现高吞吐量和可扩展性。通过索引策略、查询优化、分布式配置,并根据需求集成外部数据源和自定义查询处理器,可以在大数据场景下高效利用Solr。
利用Solr实现大规模数据搜索的解决方案(大数据场景下如何使用Solr进行搜索?)
2024-04-02

mysql 使用join进行多表关联查询的操作方法

本文介绍了MySQL多表关联查询(JOIN)的操作方法,包括JOIN条件、JOIN类型(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLJOIN)、JOIN语法和示例。此外,还介绍了高级JOIN选项,如NATURALJOIN、USINGJOIN和CROSSJOIN。最后,提供了优化JOIN查询的建议,如创建索引和选择较小的表作为左表。通过理解这些概念,用户可以创建高效的关联查询,提取有意义的信息并提高应用程序性能。
mysql 使用join进行多表关联查询的操作方法
2024-04-02

如何使用PHP进行文件夹的遍历和文件搜索?(PHP遍历文件夹和搜索文件的常用方法是什么?)

本文详细介绍了使用PHP遍历文件夹和搜索文件的七种常用方法,包括glob()函数、scandir()函数、DirectoryIterator类、RecursiveDirectoryIterator类、SplFileInfo类、文件搜索过滤器和文件递归搜索。每种方法都适合特定需求,可用于查找特定类型的文件、获取文件信息、按顺序遍历目录或递归搜索文件。
如何使用PHP进行文件夹的遍历和文件搜索?(PHP遍历文件夹和搜索文件的常用方法是什么?)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录