如何在Workerman中使用ElasticSearch进行数据存储与搜索

发布时间 - 2023-11-07 00:00:00    点击率:

在Web开发中,数据存储与搜索是非常重要的一部分。ElasticSearch是一个开源的分布式搜索引擎,被广泛应用于数据搜索和分析。它能够处理大量数据并提供高效的搜索和聚合功能。Workerman是一款高性能的PHP socket框架,适用于开发实时通信、在线游戏和高并发Web服务等应用。在本文中,我们将介绍如何在Workerman中使用ElasticSearch进行数据存储与搜索。

  1. ElasticSearch安装与配置

在开始之前,我们需要先安装和配置ElasticSearch。可以在ElasticSearch的官方网站https://www.elastic.co/downloads/elasticsearch下载最新的安装包,根据操作系统类型进行安装。安装完成后,可以通过以下命令来启动ElasticSearch:

$ cd elasticsearch/bin
$ ./elasticsearch

同时,我们还可以在config/elasticsearch.yml文件中进行ElasticSearch的配置,比如设置监听端口、集群名称和数据存储路径等。

  1. Workerman的安装与配置

在使用Workerman之前,我们需要先安装和配置它。可以通过在终端中输入以下命令来安装Workerman:

$ composer require workerman/workerman

安装完成后,我们需要创建一个PHP脚本文件,并在其中引入Workerman的Autoloader类,并添加以下代码来启动Workerman:

    require_once __DIR__ . '/vendor/autoload.php';
    use WorkermanWorker;

    $worker = new Worker();
    $worker->count = 4;
    $worker->onWorkerStart = function($worker){
      // do something
    };

    Worker::runAll();

在上述代码中,我们创建了一个Worker对象,并设置了进程数为4。同时,我们还通过onWorkerStart回调函数来定义了Worker进程启动时的行为。

  1. ElasticSearch中数据的增删查改

在Workerman中使用ElasticSearch进行数据存储与搜索,我们需要掌握ElasticSearch中数据的增删查改操作,具体操作如下所示:

a. 数据的创建

在ElasticSearch中,数据的创建是通过对指定索引和文档类型的HTTP PUT请求完成的,可以使用以下代码来创建数据:

curl -XPUT http://localhost:9200/{index}/{type}/{id} -d '{
  "title":"ElasticSearch tutorial",
  "tags":["search","elasticsearch"],
  "body":"ElasticSearch is a powerful search engine."
}'

当然,我们也可以使用PHP代码来完成数据的创建:

$client = ElasticsearchClientBuilder::create()->build();
$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'id' => 'my_id',
    'body' => [
        'title' => 'ElasticSearch tutorial',
        'tags' => ['search', 'elasticsearch'],
        'body' => 'ElasticSearch is a powerful search engine.'
    ]
];
$response = $client->index($params);

b. 数据的查询

在ElasticSearch中,数据的查询分为精确查询和模糊查询两种方式。其中,精确查询是指通过指定字段和值来查找数据,而模糊查询是指通过模糊匹配来查找数据。可以使用以下代码来完成数据的查询:

// 精确查询
$client = ElasticsearchClientBuilder::create()->build();
$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        'query' => [
            'match' => [
                'title' => 'ElasticSearch tutorial'
            ]
        ]
    ]
];
$response = $client->search($params);

// 模糊查询
$client = ElasticsearchClientBuilder::create()->build();
$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        'query' => [
            'wildcard' => [
                'title' => '*search*'
            ]
        ]
    ]
];
$response = $client->search($params);

c. 数据的更新

在ElasticSearch中,数据的更新操作是通过对指定索引和文档类型的HTTP POST请求完成的,可以使用以下代码来更新数据:

curl -XPOST http://localhost:9200/{index}/{type}/{id}/_update -d '{
  "doc":{
    "title":"New ElasticSearch tutorial"
  }
}'

当然,我们也可以使用PHP代码来完成数据的更新:

$client = ElasticsearchClientBuilder::create()->build();
$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'id' => 'my_id',
    'body' => [
        'doc' => [
            'title' => 'New ElasticSearch tutorial'
        ]
    ]
];
$response = $client->update($params);

d. 数据的删除

在ElasticSearch中,数据的删除操作是通过对指定索引和文档类型的HTTP DELETE请求完成的,可以使用以下代码来删除数据:

curl -XDELETE http://localhost:9200/{index}/{type}/{id}

当然,我们也可以使用PHP代码来完成数据的删除:

$client = ElasticsearchClientBuilder::create()->build();
$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'id' => 'my_id'
];
$response = $client->delete($params);
  1. Workerman中的ElasticSearch示例

通过上述操作,我们已经掌握了在ElasticSearch中进行数据存储与搜索的基本操作。接下来,我们将在Workerman中实现一个使用ElasticSearch进行数据存储与搜索的示例,具体代码如下所示:

require_once __DIR__ . '/vendor/autoload.php';
use WorkermanWorker;
use ElasticsearchClientBuilder;

// 创建一个Worker对象
$worker = new Worker();
$worker->count = 4;

// 启动一个ElasticSearch客户端
$client = ClientBuilder::create()->build();

// 处理连接请求
$worker->onConnect = function($connection) {
    echo "New connection from " . $connection->getRemoteIp() . PHP_EOL;
};

// 处理数据请求
$worker->onMessage = function($connection, $data) use($client) {
    $params = [
        'index' => 'my_index',
        'type' => 'my_type',
        'body' => [
            'query' => [
                'wildcard' => [
                    'title' => '*' . $data . '*'
                ]
            ]
        ]
    ];

    // 从ElasticSearch检索数据
    $response = $client->search($params);

    // 处理检索结果
    $hits = $response['hits']['hits'];
    if(count($hits) > 0) {
        $result = 'Results:' . PHP_EOL;
        foreach($hits as $hit) {
            $result .= $hit['_source']['title'] . PHP_EOL;
        }
    } else {
        $result = 'No results found.' . PHP_EOL;
    }

    // 发送结果给客户端
    $connection->send($result);
};

Worker::runAll();

在上述代码中,我们首先启动一个ElasticSearch客户端,并创建一个Worker对象来处理连接和数据请求。当有客户端连接进来后,在接收到数据请求时,我们从ElasticSearch中检索数据,并将结果发送给客户端。

  1. 总结

本文介绍了如何在Workerman中使用ElasticSearch进行数据存储与搜索。通过掌握ElasticSearch中数据的增删查改操作,我们可以快速地在Web应用中进行数据的存储和搜索。同时,我们也在Workerman中实现了一个简单的ElasticSearch应用,以便更好地理解和运用上述操作。


# workerman  # php  # 分布式  # 回调函数  # delete  # 并发  # 对象  # elasticsearch  # http  # https  # 搜索引擎 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 教学论文网站制作软件有哪些,写论文用什么软件 ?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  如何在建站之星绑定自定义域名?  潮流网站制作头像软件下载,适合母子的网名有哪些?  JavaScript Ajax实现异步通信  WEB开发之注册页面验证码倒计时代码的实现  浅谈redis在项目中的应用  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  制作电商网页,电商供应链怎么做?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  利用 Google AI 进行 YouTube 视频 SEO 描述优化  iOS发送验证码倒计时应用  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  如何快速生成专业多端适配建站电话?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel如何实现用户密码重置功能?(完整流程代码)  zabbix利用python脚本发送报警邮件的方法  如何快速查询网站的真实建站时间?  高端企业智能建站程序:SEO优化与响应式模板定制开发  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  高端建站如何打造兼具美学与转化的品牌官网?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  网站图片在线制作软件,怎么在图片上做链接?  如何在Windows虚拟主机上快速搭建网站?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Swift中swift中的switch 语句  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  微信小程序 scroll-view组件实现列表页实例代码  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何选择可靠的免备案建站服务器?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  奇安信“盘古石”团队突破 iOS 26.1 提权  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  JS中对数组元素进行增删改移的方法总结  如何将凡科建站内容保存为本地文件?  如何在宝塔面板创建新站点?  Android GridView 滑动条设置一直显示状态(推荐)  如何破解联通资金短缺导致的基站建设难题?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel如何使用Eloquent进行子查询  如何在服务器上三步完成建站并提升流量?