返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >thinkphp中使用Elasticsearch 7.0进行多表的搜索
  • 629
分享到

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

elasticsearchjenkins大数据 2023-09-11 19:09:07 629人浏览 独家记忆
摘要

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、thinkphp中使用Elasticsearch 7.0进行多表的搜索二、使用步骤1.引入库2.读入数

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

文章目录


前言

提示: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

--结束END--

本文标题: thinkphp中使用Elasticsearch 7.0进行多表的搜索

本文链接: https://lsjlt.com/news/403506.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • thinkphp中使用Elasticsearch 7.0进行多表的搜索
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、thinkphp中使用Elasticsearch 7.0进行多表的搜索二、使用步骤1.引入库2.读入数...
    99+
    2023-09-11
    elasticsearch jenkins 大数据
  • 如何在PHP中使用ElasticSearch实现搜索
    这篇“如何在PHP中使用ElasticSearch实现搜索”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何在PHP中使用E...
    99+
    2023-06-05
  • 在Oracle表中进行关键词搜索的过程
    目录在Oracle表中的关键词搜索在Oracle数据库中,我们可以很容易地在模式内的表中找到我们正在寻找的文本或关键词。结果部分。在Oracle表中的关键词搜索 在Oracle数据库中,我们可以很容易地在模式内的表中找到...
    99+
    2022-06-13
    Oracle关键词搜索 Oracle 表关键词搜索
  • 在Oracle表中如何进行关键词搜索
    这篇“在Oracle表中如何进行关键词搜索”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“在Oracle表中如何进行关键词搜索...
    99+
    2023-07-02
  • PHP 中使用 Elasticsearch 实现分布式搜索引擎
    简介:分布式搜索引擎是现代互联网应用中非常重要的一环,它能够实现快速的全文检索、高效的数据搜索和排序。Elasticsearch是一个基于Lucene的开源分布式搜索引擎,提供了强大的搜索和分析功能。本文将介绍如何在PHP中使用Elasti...
    99+
    2023-10-21
    PHP elasticsearch 分布式搜索引擎
  • PHP 中基于 Elasticsearch 的多语种搜索与翻译技术
    摘要:随着全球化的不断发展,多语种搜索与翻译变得越来越重要。在 PHP 开发中,使用 Elasticsearch 可以方便地实现多语种搜索和翻译功能。本文将介绍如何在 PHP 中使用 Elasticsearch 进行多语种搜索与翻译,并提供...
    99+
    2023-10-21
    elasticsearch 关键词:PHP 多语种搜索
  • 怎么使用Marketing Cloud的扩展字段作为搜索条件进行搜索
    本篇文章为大家展示了怎么使用Marketing Cloud的扩展字段作为搜索条件进行搜索,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。需求:我在Marketing Cloud的contact模型上用...
    99+
    2023-06-04
  • 如何使用elasticsearch搭建自己的搜索系统
    这期内容当中小编将会给大家带来有关如何使用elasticsearch搭建自己的搜索系统,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是e...
    99+
    2024-04-02
  • 跳过正则表达式字符,直到使用 golang 进行搜索
    小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《跳过正则表达式字符,直到使用 golang 进行搜索》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多...
    99+
    2024-04-04
  • 如何在Java中使用Linux分布式索引进行高效搜索?
    在当今信息爆炸的时代,如何高效地搜索大量数据成为了一个非常重要的课题。而分布式索引是一种常用的解决方案,它可以将数据分散到多个节点上进行处理,提高搜索效率。本文将介绍如何在Java中使用Linux分布式索引进行高效搜索。 一、什么是分布式索...
    99+
    2023-08-24
    分布式 索引 linux
  • Python使用Selenium自动进行百度搜索的实现
    目录安装 Selenium写代码点位网页元素我们今天介绍一个非常适合新手的python自动化小项目,项目虽小,但是五脏俱全。它是一个自动化操作网页浏览器的小应用:打开浏览器,进入百度网页,搜索关键词,最后把搜索结果保...
    99+
    2022-06-02
    Python Selenium自动百度搜索 Python Selenium自动搜索
  • php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎
    文章目录 开发环境效果展示开发前准备及注意事项部署与安装安装ES到服务器为ES分配新用户并给新用户分配对应权限ES启动与停止修改配置与错误处理错误1错误2 启动ES安装IK分词器现在与你...
    99+
    2023-09-27
    搜索引擎 elasticsearch php linux 中文分词
  • 怎么在Spring Boot中使用ElasticSearch实现一个搜索引擎
    这篇文章将为大家详细讲解有关怎么在Spring Boot中使用ElasticSearch实现一个搜索引擎,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Elastic Search是一个开源的...
    99+
    2023-05-30
    springboot elasticsearch
  • 怎么使用ABAP Restful API进行代码的全文搜索
    这篇文章主要介绍“怎么使用ABAP Restful API进行代码的全文搜索”,在日常操作中,相信很多人在怎么使用ABAP Restful API进行代码的全文搜索问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-04
  • PHP 中使用 Elasticsearch 进行用户行为分析与推荐
    概述:随着互联网的不断发展,用户行为分析和个性化推荐已经成为了各大应用领域中不可或缺的一部分。而Elasticsearch作为一个高性能、分布式的全文搜索和分析引擎,正因其强大的搜索能力和灵活的扩展性而被广泛运用于用户行为分析与个性化推荐系...
    99+
    2023-10-21
    PHP elasticsearch 用户行为分析
  • 如何在PHP中使用关键字数组进行快速搜索?
    在PHP编程中,经常需要对数据进行搜索操作,而使用关键字数组则是一种快速而有效的搜索方式。本文将介绍如何在PHP中使用关键字数组进行快速搜索,同时提供一些实例演示代码。 一、什么是关键字数组 关键字数组是指将数据中的关键词以数组的形式存储起...
    99+
    2023-08-02
    存储 关键字 数组
  • 怎么进行Python字符串中的搜索和替换
    怎么进行Python字符串中的搜索和替换,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python字符串类型转换函数,这几个函数只在string模块中有:string.atoi...
    99+
    2023-06-17
  • Android应用中怎么对搜索关键字进行匹配
    这期内容当中小编将会给大家带来有关Android应用中怎么对搜索关键字进行匹配,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 单关键字 匹配如果只是单关键字的话,那么我们先计算出他的下标,它的长度,然...
    99+
    2023-05-31
    android roi
  • 如何使用ajax结合豆瓣搜索结果进行分页
    这篇文章给大家分享的是有关如何使用ajax结合豆瓣搜索结果进行分页的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用豆瓣api,得到分页结果。相当于从后台数据库获得的结果一样。所...
    99+
    2024-04-02
  • PHP 中基于 Elasticsearch 进行文档检索的常见问题解答
    引言Elasticsearch 是一个开源的分布式搜索引擎,它提供了快速的文档检索和分析能力。在 PHP 中使用 Elasticsearch 进行文档检索是一个常见的需求。本文将解答一些常见的问题,并给出具体的代码示例。问题一:如何安装 E...
    99+
    2023-10-21
    PHP elasticsearch 文档检索
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作