php与elasticsearch视频,PHP Elasticsearch的基本使用方法

本文档介绍了如何在Windows环境下安装Elasticsearch 5.6.8、PHP 5.6以及集成Elasticsearch-php库,并在PHP的Onethink框架中进行Elasticsearch的操作,包括创建索引、删除索引、查看映射、修改映射、插入和更新文档、搜索文档等关键步骤。同时,强调了版本兼容性和配置注意事项。
摘要由CSDN通过智能技术生成

对于Elasticsearch与Elasticsearch-php的安装,网上有比较多的教程,这里不再累述。只是要注意Elasticsearch、Elasticsearch-php与php的版本。这里笔者使用的是Elasticsearch 5.6.8 windows版、php 5.6 、php onethink框架(以下简称ot)、Elasticsearch-php composer如下:(PHP Composer 视频教程){

"require":{

"elasticsearch/elasticsearch" : "~5.0"

}

}

一、连接Elasticsearch:

1、Elasticsearch开启之后,可以直接通过http://127.0.0.1:9200/查看基本信息。

2、将composer vendor下的文件复制到ot ThinkPHP\Library\Vendor\elasticsearch目录下。

3、连接Elasticsearch,public $es;

/**

* 初始化

*/

public function _initialize()

{

Vendor('elasticsearch.autoload');

//host数组可配置多个节点

$params = array(

'127.0.0.1:9200'

);

$this->es = \Elasticsearch\ClientBuilder::create()->setHosts($params)->build();

}

其中build()方法会将ClientBuilder 对象转换为一个Client对象。

二、Elasticsearch-php使用:

1、创建index:

关于index与type,这里特别纠正一个说法,index 就像关系型数据库里的 database, type 就像 database 里的 table,这种理解是错误的。/**

* 创建索引

*/

public function createIndex(){

$params = [

'index' => 'test', //索引名称

'body' => [

'settings'=> [ //配置

'number_of_shards'=> 3,//主分片数

'number_of_replicas'=> 1 //主分片的副本数

],

'mappings'=> [ //映射

'_default_' => [ //默认配置,每个类型缺省的配置使用默认配置

'_all'=>[ // 关闭所有字段的检索

'enabled' => 'false'

],

'_source'=>[ // 存储原始文档

'enabled' => 'true'

],

'properties'=> [ //配置数据结构与类型

'name'=> [ //字段1

'type'=>'string',//类型 string、integer、float、double、boolean、date

'index'=> 'analyzed',//索引是否精确值 analyzed not_analyzed

],

'age'=> [ //字段2

'type'=>'integer',

],

'sex'=> [ //字段3

'type'=>'string',

'index'=> 'not_analyzed',

],

]

],

'my_type' => [

'properties' => [

'phone'=> [

'type'=>'string',

],

]

],

],

]

];

$res = $this->es->indices()->create($params);

}

在使用Elasticsearch-php API的时候,参数$params一般是用数组来,因为数组结构能很方便的转换为json。其中

_default_是默认配置,其他配置的缺省值都与_default_的相同。

_all设置true会将所有原始文档拼接在一起额外存储,

_source设置为true会存储原始文档,设置false一般用在只需要索引出文档的标题或者Url,通过Url去访问文档,而不需要在es中保存一份文档内容的场景。

最后,注意同一index下不同type中的同名称字段的数据类型与配置也必须相同!

2、删除index:/**

* 删除索引

*/

public function deleteIndex(){

$params = [

'index' => 'test'

];

$res = $this->es->indices()->delete($params);

}

3、查看Mappings:public function getMappings(){

$params = [

'index' => 'test'

];

$res = $this->es->indices()->getMapping($params);

}

4、修改Mappings:public function putMappings(){

$params = [

'index' => 'test',

'type' => 'my_type',

'body' => [

'my_type' => [

'properties' => [

'idcard' => [

'type' => 'integer'

]

]

]

]

];

$res = $this->es->indices()->putMapping($params);

}

注意:修改Mappings的API必须要指明type,且只能添加,不能修改已有的属性。

5、插入单条 Document:public function postSinDoc(){

$params = [

'index' => 'test',

'type' => 'my_type',

'body' => [

'age' => 17,

'name' => 'saki',

'sex' => '女性',

'idcard' => 1112,

'phone' => '1245789',

]

];

$res = $this->es->index($params);

}

6、插入多条 Document:public function postBulkDoc(){

for($i = 0; $i < 5; $i++) {

$params['body'][] = [

'index' => [

'_index' => 'test',

'_type' => 'my_type',

]

];

$params['body'][] = [

'age' => 17+$i,

'name' => 'reimu'.$i,

'sex' => '女性',

'idcard' => 1112+$i,

'phone' => '1245789'.$i,

];

}

$res = $this->es->bulk($params);

}

7、通过id获取Document:public function getDocById(){

$params = [

'index' => 'test',

'type' => 'my_type',

'id' => 'AWIDV5l2A907wJBVKu6k'

];

$res = $this->es->get($params);

}

8、通过id更新Document:public function updateDocById(){

$params = [

'index' => 'test',

'type' => 'my_type',

'id' => 'AWIDV5l2A907wJBVKu6k',

'body' => [

'doc' => [ //将doc中的文档与现有文档合并

'name' => 'marisa'

]

]

];

$res = $this->es->update($params);

}

9、通过id删除Document:public function deleteDocById(){

$params = [

'index' => 'test',

'type' => 'my_type',

'id' => 'AWIDV5l2A907wJBVKu6k'

];

$res = $this->es->delete($params);

}

注意:以上通过id的三个操作,如果未找到id,Elasticsearch-php会直接报错!

10、搜索Document:public function searchDoc(){

$params = [

'index' => 'test',

'type' => 'my_type',

'body' => [

'query' => [

'constant_score' => [ //非评分模式执行

'filter' => [ //过滤器,不会计算相关度,速度快

'term' => [ //精确查找,不支持多个条件

'name' => 'reimu0'

]

]

]

]

]

];

$res = $this->es->search($params);

这里只是搜索的一个示例。

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值