PHP Elasticsearch的基本使用方法
2022-12-02 09:01:16
126
{{single.collect_count}}
对于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全文搜索实战》(实战视频)

来自课程《千万级数据并发解决方案(理论+实战)》

一、连接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);
登录后复制

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

相关推荐:

实例详解MySQL 与 Elasticsearch 数据不对称问题

Elasticsearch是什么?Elasticsearch 能够被用在什么地方?

Elasticsearch索引和文档操作实例教程

php入门到就业线上直播课:立即学习
全程直播 + 实战授课 + 边学 + 边练 + 边辅导

以上就是PHP Elasticsearch的基本使用方法的详细内容,更多请关注php中文网其它相关文章!

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}