商城首页欢迎来到中国正版软件门户

您的位置:首页 >php elasticsearch,PHP ElasticSearch的使用

php elasticsearch,PHP ElasticSearch的使用

  发布于2026-04-28 阅读(0)

扫一扫,手机访问

系统是Windows server 2003。

说到ElasticSearch,很多开发者都知道,它是一个基于Lucene构建的、稳定且分布式的RESTful搜索引擎。这里提到的RESTful,说白了就是它直接提供了一系列URL接口,让你可以通过HTTP调用来建立索引和进行检索。当然,直接对着URL“硬编码”调用,对大多数人来说操作起来还是太“原始”了。好在,官方贴心地提供了多种语言的客户端包,相当于把底层的curl请求给封装好了,用起来就顺手多了。这些客户端支持Ja va、PHP、Python、Ruby和Perl等主流语言,覆盖面很广。

我们今天重点聊聊PHP版的客户端,也就是elasticsearch-php。这个包在GitHub上就能找到,地址是:https://github.com/elasticsearch/elasticsearch。

那么,要在项目里用上elasticsearch-php,需要满足哪几个前提条件呢?主要有三条:

1. PHP版本需要在5.3.9以上。以我这次的环境为例,用的是PHP 5.3.23,是满足要求的。 2. 项目需要使用Composer来进行依赖包管理。如果你还没安装Composer,可以去 https://getcomposer.org/ 下载。 3. 别忘了在php.ini配置文件中,确保curl和openssl这两个扩展是开启状态。

另外,运行Elasticsearch服务本身,还需要JDK环境。建议JDK版本不低于6,稳妥起见,直接上8更好,毕竟7版本存在一些已知的安全漏洞。

下面这张图,清晰地列出了搭建这个环境所需的核心组件,可以对照参考:

5b4968ce3c817de837bb2d6d40f18555.png

启动Elasticsearch服务的过程倒是非常简单。进入解压后的目录,直接运行里面的 `elasticsearch.bat` 批处理文件就行。当你看到控制台最后输出“start”字样时,就说明服务已经成功启动了。

接下来,才是重头戏:如何使用elasticsearch-php客户端。我们一步步来:

1. 首先,新建一个项目文件夹,比如就叫 `test`。 2. 在这个文件夹里,创建一个名为 `composer.json` 的文件,内容如下: { "require":{ "elasticsearch/elasticsearch" : "~1.2" } } 3. 把下载好的 `composer.phar` 文件也拷贝到 `test` 文件夹里。然后打开命令行,切换到 `test` 目录,执行命令:php composer.phar install --no-dev。稍等片刻,等待安装完成。 安装成功后,你会看到 `test` 文件夹下生成了一个 `vendor` 目录,里面包含了elasticsearch、composer、guzzle等一系列依赖包。 4. 环境准备就绪,现在可以编写代码来建立索引和进行检索了。下面是一个完整的示例代码:

require_once('vendor/autoload.php');

function get_conn(){
    $host = 'ip';
    $dbname = 'dbname';
    $user = 'user';
    $passwd = 'passwd';
    $conn = new PDO("pgsql:dbname=$dbname;host=$host",$user,$passwd);
    return $conn;
}

function create_index(){
    //Elastic search php client
    $client = new Elasticsearch\Client();
    $sql = "SELECT * FROM log";
    $conn = get_conn();
    $stmt = $conn->query($sql);
    $rtn = $stmt->fetchAll();

    //delete index which already created
    $params = array();
    $params['index'] = 'log_index';
    $client->indices()->delete($params);

    //create index on log_date,src_ip,dest_ip
    $rtnCount = count($rtn);
    for($i=0;$i<$rtnCount;$i++){
        $params = array();
        $params['body'] = array(
            'log_date' => $rtn[$i]['log_date'],
            'src_ip' => $rtn[$i]['src_ip'],
            'dest_ip' => $rtn[$i]['dest_ip']
        );
        $params['index'] = 'log_index';
        $params['type'] = 'log_type';
        //Document will be indexed to log_index/log_type/autogenerate_id
        $client->index($params);
    }
    echo 'create index done!';
}

function search(){
    //Elastic search php client
    $client = new Elasticsearch\Client();
    $params = array();
    $params['index'] = 'log_index';
    $params['type'] = 'log_type';
    $params['body']['query']['match']['src_ip'] = '1.122.33.141';
    $rtn = $client->search($params);
    var_dump($rtn);
}

set_time_limit(0);
//create_index();
search();

运行这段代码,如果建立索引成功,页面会输出“create index done!”。而执行搜索功能后,则会打印出匹配查询条件的详细结果数组。这样一来,从环境搭建到基础增删改查的完整链路就跑通了。

Elasticsearch之ja va的基本操作一

摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

Elasticsearch 5.0 中term 查询和match 查询的认识

Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...

以bank account 数据为例,认识elasticsearch query 和 filter

Elasticsearch 查询语言(Query DSL)认识(一) 一.基本认识 查询子句的行为取决于 query context filter context 也就是执行的是查询(query)还是 ...

Ubuntu 14.04中Elasticsearch集群配置

Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

ElasticSearch 5学习(10)——结构化查询(包括新特性)

之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request...

ElasticSearch 5学习(9)——映射和分析(string类型废弃)

在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

.net Elasticsearch 学习入门笔记

一. es安装相关1.elasticsearch安装 运行http://localhost:9200/2.head插件3.bigdesk插件安装(安装细节百度:windows elasticsear ...

自己写的数据交换工具——从Oracle到Elasticsearch

先说说需求的背景,由于业务数据都在Oracle数据库中,想要对它进行数据的分析会非常非常慢,用传统的数据仓库-->数据集市这种方式,集市层表会非常大,查询的时候如果再做一些group的操作,一个 ...

如何在Elasticsearch中安装中文分词器(IK+pinyin)

如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...

jar hell & elasticsearchik版本问题

想给es 安装一个ik 的插件, 我的es 是 2.4.0, 下载了一个版本是 1.9.5, [2016-10-09 16:56:26,248][INFO ][node ] [node-2] init ...

随机推荐

geotrellis使用(二十八)栅格数据色彩渲染(多波段真彩色)

目录 前言 实现过程 总结 一.前言 上一篇文章介绍了如何使用Geotrellis渲染单波段的栅格数据,已然很是头疼,这几天不懈努力之后工作又进了一步,整清楚了如何使用Geotrelli ...

Win10 无法完全关机问题

Win10是重新安装的.开机运行时间长了或者跑的东西多了.关机,键盘灯还是亮的,要强制按电源键关机才行. 问题解决:从网上搜以为是显卡驱动问题,上官网更新最新驱动,结果还是关不了机.偶然间搜到是Int ...

php 利用activeMq+stomp实现消息队列

php 利用activeMq+stomp实现消息队列 一.activeMq概述 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J ...

InfiniBand技术简介

InfiniBand技术简介 转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍 随着CPU和通讯处理速度的 ...

C/C++变量命名规则

变量命名规则是为了增强代码的可读性和easy维护性. 变量命名规则: 一.用最短字符表示最准确的意义. 二.使用变量前缀. 1. 整型前缀 int nId; ...

AngularJS初步

AngularJS特点 遵循AMD规范 不需要操作节点 对于jquery,一般是利用现有完整的DOM,然后在这戏Dom的基础上进行二次调教了:而对于AngularJS等框架则是根据数据模型以及其对应用 ...

Python rich comparisons 自定义对象比较过程和返回值

Classes wishing to support the rich comparison mechanisms must add one or more of the following new...

how2heap学习笔记

github源代码地址 这里只分析glibc2.25堆分配的特性,为了方便调试编译时使用 gcc -g -no-pie-o

python(41):copy拷贝(深拷贝deepcopy与浅拷贝copy)

Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1.copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2.copy.deepco ...

rabbitmq系列(一)-基本概念理解

1.简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue protocol)的开源实现.AMQP高级消息队列,说白了就是一个开源的消息中间件.它能解决 ...

本文转载于:https://blog.csdn.net/weixin_30880157/article/details/115728221 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注