mzhaox

1、声明依赖关系:

        比方说,你的项目中需要一个php版的elasticsearch框架。为了将它添加到你的项目中(下载),你所需要做的就是创建一个 composer.json 文件,其中描述了项目的依赖关系。注意文件要放在你执行composer命令的目录中

{
    "require":{
        "elasticsearch/elasticsearch":"~2.0"
    }
}

2、cmd切换到要下载elasticsearch框架的目录,然后执行命令:composer install

     如有出错误信息:

      [Composer\Downloader\TransportException]

      Content-Length mismatch, received 583439 bytes out of the expected 1215108

     解决办法:切换国内镜像地址,再执行操作

      1、通过命令切换如下:(最终修改的是composer.json)

      composer config -g repo.packagist composer https://packagist.phpcomposer.com

      2、直接修改 composer.json (其实跟方法1是一样的。)

{
    "require":{
        "elasticsearch/elasticsearch":"~2.0"
    },
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        }
    }
}

   

 

PHP使用elasticsearch教程

想直接通过文件查看其他方法可以打开以下文件查看(基本使用的方法都在里面):

1、\elasticsearch\src\Elasticsearch\Client.php中的方法

2、\elasticsearch\Namespaces\IndicesNamespace.php中的方法

ThinkPHP中的模型(已测试过):

<?php
/**
 * Elasticsearch检索引擎模型
 */
namespace app\index\model;
use Elasticsearch\ClientBuilder;  
   
class Elasticsearch
{
    //配置
    private $config = [
        \'hosts\' => [\'http://127.0.0.1:9200\']
    ];
    private $api;
    public function __construct()
    {
        #include(APP_PATH .\'/vendor/autoload.php\');
        #require_once EXTEND_PATH . \'org/elasticsearch/autoload.php\';
        import(\'org.elasticsearch.autoload\', EXTEND_PATH);
        $this->api = ClientBuilder::create()->setHosts($this->config[\'hosts\'])->build(); 
    }
 
    /*************************************************************
    /**
     * 索引一个文档
     * 说明:索引没有被创建时会自动创建索引
     */
    public function addOne()
    {
        $params = [];  
        $params[\'index\'] = \'xiaochuan\';  
        $params[\'type\']  = \'cat\';  
        $params[\'id\']  = \'20180407001\';  # 不指定就是es自动分配
        $params[\'body\']  = array(\'name\' => \'小川编程\');  
        return $this->api->index($params);
    }
 
    /**
     * 索引多个文档
     * 说明:索引没有被创建时会自动创建索引
     */
    public function addAll()
    {
        $params = [];
        for($i = 1; $i < 21; $i++) {  
            $params[\'body\'][] = [
                \'index\' => [
                    \'_index\' => \'test_index\'.$i,
                    \'_type\'  => \'cat_test\',
                    \'_id\'    => $i,
                ]
            ];  
            $params[\'body\'][] = [  
                \'name\' => \'小川编程\'.$i,  
                \'content\' => \'内容\'.$i  
            ];
        }  
        return $this->api->bulk($params);  
    }
 
    /**
     * 获取一个文档
     */
    public function getOne()
    {
        $params = [];  
        $params[\'index\'] = \'xiaochuan\';  
        $params[\'type\']  = \'cat\';  
        $params[\'id\']    = \'20180407001\';  
        return $this->api->get($params); 
    }
 
    /**
     * 搜索文档
     */
    public function search()
    {
        $params = [];
        $params[\'index\'] = \'xiaochuan\';  
        $params[\'type\']  = \'cat\';  
        $params[\'body\'][\'query\'][\'match\'][\'name\'] = \'小川编程\';  
        return $this->api->search($params); 
    }
 
    /**
     * 删除文档
     * 说明:文档删除后,不会删除对应索引。
     */
    public function delete()
    {
        $params = [];  
        $params[\'index\'] = \'xiaochuan\';  
        $params[\'type\'] = \'cat\';  
        $params[\'id\'] = \'20180407001\';  
        return $this->api->delete($params);  
    }
 
    /*************************************************************
    /**
     * 创建索引
     */
    public function createIndex()
    {
        $params = [];
        $params[\'index\']  = \'xiaochuan\'; 
        return $this->api->indices()->create($params);  
    }
       
      /**
     * 删除索引:匹配单个 | 匹配多个
     * 说明: 索引删除后,索引下的所有文档也会被删除
     */
      public function deleteIndex()
      {  
          $params = [];
          $params[\'index\'] = \'test_index\';  # 删除test_index单个索引
          #$params[\'index\'] = \'test_index*\'; # 删除以test_index开始的所有索引
        return $this->api->indices()->delete($params);  
      }
 
      /*************************************************************
      /**
     * 设置索引配置
     */
      public function setIndexConfig()
      {  
          $params = [];
          $params[\'index\'] = \'xiaochuan\';  
        $params[\'body\'][\'index\'][\'number_of_replicas\'] = 0;  
        $params[\'body\'][\'index\'][\'refresh_interval\'] = -1;  
        return $this->api->indices()->putSettings($params);  
      }
 
      /**
     * 获取索引配置
     */
      public function getIndexConfig()
      {
          # 单个获取条件写法
        $params[\'index\'] = \'xiaochuan\';  
        # 多个获取条件写法
        //$params[\'index\'] = [\'xiaochuan\', \'test_index\'];  
        return $this->api->indices()->getSettings($params);  
      }
 
    /**
     * 设置索引映射
     */
      public function setIndexMapping()
      {
          #  设置索引和类型 
        $params[\'index\'] = \'xiaochuan\';  
        $params[\'type\']  = \'cat\';  
           
        #  向现有索引添加新类型
        $myTypeMapping = array(  
            \'_source\' => array(  
                \'enabled\' => true  
            ),  
            \'properties\' => array(  
                \'first_name\' => array(  
                    \'type\' => \'string\',  
                    \'analyzer\' => \'standard\'  
                ),  
                \'age\' => array(  
                    \'type\' => \'integer\'  
                )  
            )  
        );  
        $params[\'body\'][\'cat\'] = $myTypeMapping;  
           
        #  更新索引映射 
        $this->api->indices()->putMapping($params);  
      }
 
      /**
     * 获取索引映射
     */
      public function getIndexMapping()
      {  
          #  获取所有索引和类型的映射  
        $ret = $this->api->indices()->getMapping();  
         
        /*  
        #  获取索引为:xiaochuan的映射
        $params[\'index\'] = \'xiaochuan\';  
        $ret = $this->api->indices()->getMapping($params);  
           
        #  获取类型为:cat的映射
        $params[\'type\'] = \'cat\';  
        $ret = $this->api->indices()->getMapping($params);  
           
        #  获取(索引为:xiaochuan和 类型为:cat)的映射
        $params[\'index\'] = \'xiaochuan\';  
        $params[\'type\']  = \'cat\'  
        $ret = $this->api->indices()->getMapping($params);  
           
        #  获取索引为:xiaochuan和test_index的映射
        $params[\'index\'] = [\'xiaochuan\', \'test_index\'];  
        $ret = $this->api->indices()->getMapping($params); 
        */
 
        return $ret;
      }
}

其他形式用法测试:

test.php

<?php   
require_once(\'vendor/autoload.php\');  
use Elasticsearch\ClientBuilder;  
   
   
function get_conn(){  
    $host = \'localhost\';  
    $dbname = \'mraz\';  
    $user = \'root\';  
    $passwd = \'111111\';  
   
   
    $conn = new PDO("mysql:dbname=$dbname;host=$host",$user,$passwd);  
    return $conn;  
}  
   
   
function create_index(){  
    //Elastic search php client  
   
   
   
   
    $client = Elasticsearch\ClientBuilder::create()->build();  
    $sql    = "SELECT * FROM emp";  
    $conn   = get_conn();  
    $stmt   = $conn->query($sql);  
    $rtn    = $stmt->fetchAll();  
   
   
    //delete index which already created  
    $params = array();  
    $params[\'index\'] = \'emp_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(  
            \'id\'       => $rtn[$i][\'id\'],  
            \'fdName\'   => $rtn[$i][\'fdName\'],  
            \'fdAge\'    => $rtn[$i][\'fdAge\'],  
            \'fdStatus\' => $rtn[$i][\'fdStatus\']  
        );  
        $params[\'index\'] = \'emp_index\';  
        $params[\'type\']  = \'emp_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 = Elasticsearch\ClientBuilder::create()->build();  
    $params = array();  
    $params[\'index\'] = \'emp_index\';  
    $params[\'type\'] = \'emp_type\';  
    $params[\'body\'][\'query\'][\'match\'][\'fdStatus\'] = \'1\';  
    $params[\'body\'][\'sort\'] = array(\'fdAge\'=>array(\'order\'=>\'desc\'));  
    $params[\'size\'] = 3;    
    $params[\'from\'] = 1;    
    $rtn = $client->search($params);  
    var_dump($rtn);  
}  
set_time_limit(0);  
// create_index();  
search();  
?>

1)创建:

include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\';  //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$data[\'body\'][\'settings\'][\'number_of_shards\'] = 5;  //主分片数量  
$data[\'body\'][\'settings\'][\'number_of_replicas\'] = 0; //从分片数量  
$elastic->indices()->create($index);

2)插入索引数据:

include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\'; //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$index[\'id\'] = 1   //不指定id,系统会自动生成唯一id  
$index[\'body\'] = array(  
  \'mac\' => \'fcd5d900beca\',  
  \'customer_id\' => 3,  
  \'product_id\' => 5,  
  \'version\' => 2  
);  
$elastic->index($index);

3)查询:

include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\'; //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$index[\'body\'][\'query\'][\'match\'][\'mac\'] = \'fcd5d900beca\';  
$index[\'size\'] = 10;  
$index[\'from\'] = 200;  
$elastic->search($index);  
 
#相当于sql语句:select*from ems_run_log where mac=\'fcd5d900beca\' limit 200,10;
include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\'; //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$index[\'body\'][\'query\'][\'bool\'][\'must\'] = array(  
    array(\'match\' => array(\'mac\' => \'fcd5d900beca\')),  
    array(\'match\' => array(\'product_id\' => 20))  
   );  
$index[\'size\'] = 10;  
$index[\'from\'] = 200;  
$elastic->search($index);  
 
#相当于sql语句:select*from ems_run_log where mac=\'fcd5d900beca\' and product_id=20 limit 200,10;
include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\'; //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$index[\'body\'][\'query\'][\'bool\'][\'should\'] = array(  
      array(\'match\' => array(\'mac\' => \'fcd5d900beca\')),  
      array(\'match\' => array(\'product_id\' => 20))  
     );  
$index[\'size\'] = 10;  
$index[\'from\'] = 200;  
$elastic->search($index);  
 
#当于sql语句:select*from ems_run_log where mac=\'fcd5d900beca\' or product_id=20 limit 200,10;
include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\'; //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$index[\'body\'][\'query\'][\'bool\'][\'must_not\'] = array(  
   array(\'match\' => array(\'mac\' => \'fcd5d900beca\')),  
   array(\'match\' => array(\'product_id\' => 20))  
  );  
$index[\'size\'] = 10;  
$index[\'from\'] = 200;  
$elastic->search($index);  
 
#相当于sql语句:select*from ems_run_log where mac!=\'fcd5d900beca\' and product_id!=20 limit 200,10;
include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\'; //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$index[\'body\'][\'query\'][\'range\'] = array(  
   \'id\' => array(\'gte\' => 20,\'lt\' => 30);  
 );  
$index[\'size\'] = 10;  
$index[\'from\'] = 200;  
$elastic->search($index);  
 
#相当于sql语句:select*from ems_run_log where id>=20 and id<30  limit 200,10;

4)删除文档:

include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'test\';  //索引名称  
$index[\'type\'] = \'ems_test\'; //类型名称  
$index[\'id\'] = 2;   
$elastic->delete($index);
include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\'; //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$index[\'body\'][\'query\'][\'bool\'][\'must_not\'] = array(  
   array(\'match\' => array(\'mac\' => \'fcd5d900beca\')),  
   array(\'match\' => array(\'product_id\' => 20))  
  );  
$index[\'size\'] = 10;  
$index[\'from\'] = 200;  
$elastic->search($index);  
 
#相当于sql语句:select*from ems_run_log where mac!=\'fcd5d900beca\' and product_id!=20 limit 200,10;
include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'log\'; //索引名称  
$index[\'type\'] = \'ems_run_log\'; //类型名称  
$index[\'body\'][\'query\'][\'range\'] = array(  
   \'id\' => array(\'gte\' => 20,\'lt\' => 30);  
 );  
$index[\'size\'] = 10;  
$index[\'from\'] = 200;  
$elastic->search($index);  
 
#相当于sql语句:select*from ems_run_log where id>=20 and id<30  limit 200,10;

4)删除文档:

include(\'./vendor/autoload.php\');  
$elastic = new Elasticsearch\Client();  
$index[\'index\'] = \'test\';  //索引名称  
$index[\'type\'] = \'ems_test\'; //类型名称  
$index[\'id\'] = 2;   
$elastic->delete($index);

 

 

 

 

 

 

 

分类:

技术点:

相关文章: