Elasticsearch PHP版

  • Post author:
  • Post category:php

Elasticsearch PHP版

博客地址:http://www.1024cc.cn

简介:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。简称:ES。用途: 用于分布式全文检索

  1. java环境安装
参考地址:https://www.runoob.com/java/java-environment-setup.html

a. 下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
b. 配置环境变量
    在 "系统变量" 中设置 3 项属性,JAVA_HOME、PATH、CLASSPATH(大小写无所谓),若已存在则点击"编辑",不存在则点击"新建"。

    // 注意:如果使用 1.5 以上版本的 JDK,不用设置 CLASSPATH 环境变量,也可以正常编译和运行 Java 程序。

    变量设置参数如下:
    
    变量名:JAVA_HOME
    变量值:C:\Program Files (x86)\Java\jdk1.8.0_91        // 要根据自己的实际路径配置
    变量名:CLASSPATH
    变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;         //记得前面有个"."
    变量名:Path
    
    变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

c. 测试JDK是否安装成功
    1、"开始"->"运行",键入"cmd";
    2、键入命令: java -version、java、javac 几个命令,出现以下信息,说明环境变量配置成功;
  1. 搭建Elasticsearch环境
Elastic官网:https://www.elastic.co/cn/
a.下载安装包:下载地址:https://www.elastic.co/cn/downloads/elasticsearch
b. 解压,无需安装
c. 进入elasticsearch/bin目录,可以看到下面的执行文件:elasticsearch.bat
d. 检测:打开浏览器,访问http://localhost:9200,看看是否真的启动了。
  1. 首先第一步创建一个composer.json文件(数据如下),composer install 命令进行安装
{
  "require":{
    "elasticsearch/elasticsearch" : "~1.2"
  }
}
  1. 创建一个检索类:ElasticTest.php
<?php

class ElasticTest
{
    private $es;
    private $db;
    // 构造函数
    public function __construct()
    {
        include('./vendor/autoload.php');
        $params = array(
            '127.0.0.1:9200'
        );
        $this->es = \Elasticsearch\ClientBuilder::create()->setHosts($params)->build();

        // 连接数据库
		$this->db = new PDO('mysql:dbhost=127.0.0.1;dbname=test','root','root');
    }

    // 基本用法(仅供学习)
    public function test() {
        // 索引一个文档
        $params = [
		    'index' => 'my_index',
		    'type' => 'my_type',
		    'id' => 'my_id',
		    'body' => ['testField' => 'abc']
		];

		$response = $this->es->index($params);
		print_r($response);exit;

		// 获取一个文档
		$params = [
		    'index' => 'my_index',
		    'type' => 'my_type',
		    'id' => 'my_id'
		];

		$response = $this->es->get($params);
		print_r($response);

		// 搜索一个文档
		$params = [
		    'index' => 'my_index',
		    'type' => 'my_type',
		    'body' => [
		        'query' => [
		            'match' => [
		                'testField' => 'abc'
		            ]
		        ]
		    ]
		];

		$response = $this->es->search($params);
		print_r($response);

		// 删除一个文档
		$params = [
		    'index' => 'my_index',
		    'type' => 'my_type',
		    'id' => 'my_id'
		];

		$response = $this->es->delete($params);
		print_r($response);

		// 删除一个索引
		$deleteParams = [
            'index' => 'my_index'
        ];
        $response = $this->es->indices()->delete($deleteParams);
        print_r($response);

        // 创建一个索引
        $params = [
            'index' => 'my_index',
            'body' => [
                'settings' => [
                    'number_of_shards' => 2,
                    'number_of_replicas' => 0
                ]
            ]
        ];

        $response = $this->es->indices()->create($params);
        print_r($response);
    }

    // 创建索引
    public function create_index() {
    	// 数据
    	$sql = "select * from product";
    	$data = $this->db->query($sql)->fetchAll();
    	
    	$params = array();  
	    $params['index'] = 'emp_index';  
	    $this->es->indices()->delete($params);  
	      
	    $dataCount = count($data);
	    for($i=0;$i<$dataCount;$i++){  
	        $params = array();  
	        $params['body'] = array(  
	            'id'       => $data[$i]['id'],  
	            'product_name'   => $data[$i]['product_name'],  
	            'introduction'    => $data[$i]['introduction'],  
	            'sale_price' => $data[$i]['sale_price'],  
	            'market_price' => $data[$i]['market_price'],  
	            'cost_price' => $data[$i]['cost_price'],  
	            'stock_count' => $data[$i]['stock_count']
	        );  
	        $params['index'] = 'emp_index';  
	        $params['type']  = 'emp_type';  
	               
	        $this->es->index($params);  
		}
	    
	    echo 'create index done!';  

    }

    // 检索
    public function search() {
    	//Elastic search php client   
	    $params = array();  
	    $params['index'] = 'emp_index';  
	    $params['type'] = 'emp_type';  
	    $params['body']['query']['match']['product_name'] = 'test';  
	    // $params['body']['sort'] = array('stock_count'=>array('order'=>'desc'));  
	    $params['size'] = 3;    
	    $params['from'] = 1;    
	    $data = $this->es->search($params);  
	    return $data;
    }
}
  1. 调用执行测试:test.php
<?php 

require "./ElasticTest.php";
// 实例化全文检索类
$es = new ElasticTest();

// 创建索引
$es->create_index();
// 检索数据
$data = $es->search();
echo json_encode($data);

版权声明:本文为cc_echo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。