1、声明依赖关系:

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

1
2
3
4
5
{
     "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是一样的。)

1
2
3
4
5
6
7
8
9
10
11
{
     "require" :{
         "elasticsearch/elasticsearch" : "~2.0"
     },
     "repositories" : {
         "packagist" : {
             "type" "composer" ,
             "url" "https://packagist.phpcomposer.com"
         }
     }
}

PHP使用elasticsearch教程

下面我们讲一下基本使用方法,需要获取更多使用教程和方法请看官方文档:https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_overview.html

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

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

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<?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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?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)创建:

1
2
3
4
5
6
7
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)插入索引数据:

1
2
3
4
5
6
7
8
9
10
11
12
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)查询:

1
2
3
4
5
6
7
8
9
10
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;

1
2
3
4
5
6
7
8
9
10
11
12
13
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;

1
2
3
4
5
6
7
8
9
10
11
12
13
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;

Elasticsearch全文搜索引擎-PHP使用教程。

 小川 2018-07-07  PHP

用Composer来生成php版的elasticsearch框架

如果你还没有安装Composer的话请看:Composer安装教程文章。

1、声明依赖关系:

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

1
2
3
4
5
{
     "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是一样的。)

1
2
3
4
5
6
7
8
9
10
11
{
     "require" :{
         "elasticsearch/elasticsearch" : "~2.0"
     },
     "repositories" : {
         "packagist" : {
             "type" "composer" ,
             "url" "https://packagist.phpcomposer.com"
         }
     }
}

PHP使用elasticsearch教程

下面我们讲一下基本使用方法,需要获取更多使用教程和方法请看官方文档:https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_overview.html

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

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

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<?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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?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)创建:

1
2
3
4
5
6
7
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)插入索引数据:

1
2
3
4
5
6
7
8
9
10
11
12
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)查询:

1
2
3
4
5
6
7
8
9
10
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;

1
2
3
4
5
6
7
8
9
10
11
12
13
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;

1
2
3
4
5
6
7
8
9
10
11
12
13
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;

1
2
3
4
5
6
7
8
9
10
11
12
13
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;

1
2
3
4
5
6
7
8
9
10
11
12
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)删除文档:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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;

1
2
3
4
5
6
7
8
9
10
11
12
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)删除文档:

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

转载于:https://www.cnblogs.com/ljl123/p/9505773.html

Elasticsearch全文搜索引擎-PHP使用教程。相关推荐

  1. 一文看懂-ElasticSearch全文搜索引擎

    一文看懂-ElasticSearch全文搜索引擎 一.ElasticSearch简介 1.1 什么是ElasticSearch ElasticSearch简称ES,其中Elastic 从名字里我们可以 ...

  2. ElasticSearch 全文搜索引擎的查询详解①(Ubuntu版 v6.6.2)

    ElasticSearch 全文搜索引擎的查询详解①(Ubuntu版 v6.6.2) 1. 前提 2. 轻量搜索 2.1 单条件查询 2.2 多条件查询 2.3 不指定属性查询(查询所有文档属性)-- ...

  3. PHP使用Elasticsearch 全文搜索引擎的开发

    PHP基于elasticsearch全文搜索引擎的开发 1.概述: 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选.Elastic ...

  4. Elasticsearch全文搜索引擎,从0到0.6

    目录 一,ES简介 1,es实现原理 2,基本结构 3,ELK 二.Linux搭建环境 1,jdk安装 2,安装Elasticsearch 3,启动es 4,启动es可能遇到的错误 4,在windon ...

  5. ElasticSearch全文搜索引擎

    一.ElasticSearch简介 1.1 什么是ElasticSearch ElasticSearch简称ES,其中Elastic      从名字里我们可以知道,ES的特点就在于灵活的搜索,其实E ...

  6. 关于Elasticsearch全文搜索引擎

    什么是Elasticsearch? 我们可以把它简称为ES,但是搜索它的资料时(例如百度)还是使用Elasticsearch进行搜索更准确, 这个软件不再是SpringCloud提供的,它也不针对微服 ...

  7. ElasticSearch——全文搜索引擎

    一.为什么需要全文搜索引擎? 首先先来了解一个概念,在我们生活中一般来说有两种数据:结构化数据.非结构化数据 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据: 非结构化 ...

  8. ElasticSearch 全文搜索引擎

    一.ElasticSearch 简介 1.什么是 ElasticSearch? Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储.检索数据:本身 ...

  9. ElasticSearch 全文搜索引擎;ES 搜索引擎

    一.ElasticSearch 简介 1.什么是 ElasticSearch? Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储.检索数据:本身 ...

最新文章

  1. Windows Server 2016 Technical Preview 5 X64 中文版下载地址
  2. 去除警告,打电话,发信息,应用程序之间跳转,打印沙盒路径,字符串名字转换方法,包装导航控制器等的代码...
  3. symfony api 错误响应_如何设计一个牛逼的 API 接口
  4. Java实现替换多个字符串中的参数
  5. 11月12号 用户登录输入密码错误达到指定次数后,锁定账户 004
  6. EF – 8.多对多关联
  7. MAC 开发环境搭建及工具
  8. 阿里大鱼短信接口PHP版,精简版阿里大鱼短信SMS发送接口PHP实例
  9. jinja模板简介与概述
  10. 玩转手机摄影 oeasy教程总结
  11. 重复独立事件,伯努利概型 (概统1)
  12. bmi计算器公式_bmi计算器公式
  13. 设计篇:一文分清UIUE
  14. 如何快速打造淘宝爆款
  15. 银光类似web visio的节点连线控件Essential Diagram免费下载地址
  16. 35个非常有创意的 Flash 网站作品欣赏
  17. NLP文本分析(文本分类与句子评分)
  18. R语言错误 --> Error in plot.new() : figure margins too large
  19. 现代密码学(五)——零知识证明
  20. PWA(Progressive Web App)入门系列:(一)PWA简介

热门文章

  1. BiometricPrompt之六 - BiometricDialogView锁屏显示
  2. 微信小程序 开发 总结
  3. seata源码分析之全局事务的开启跟xid的传递
  4. HTML5 图片标签 img
  5. layui后台管理登录
  6. 你用什么写简历:word?pdf?Latex?Markdown?Html?
  7. 涂抹果酱(三进制状压dp)
  8. 日立电梯服务器显示地址操作异常,日立电梯服务器地址操作异常
  9. 笔记——inf、dsc、dec文件
  10. 基于51单片机的智能门铃