时间:2021-07-01 10:21:17 帮助过:45人阅读
Elasticsearch 是目前流行的大数据处理框架之一,详细的说明可以自行百度等.
以下文章采用es缩写作为代表Elasticsearch
es有官方的php api接口,可以采用github下载或者composer.
- $params = [ 'index' => 'user_index', //索引名(相当于mysql的数据库)
- 'body' => [ 'mappings' => [ 'normal_type' => [ //类型名(相当于mysql的表)
- '_all'=>[ // 是否开启所有字段的检索
- 'enabled' => 'false'
- ], 'properties' => [ //文档类型设置(相当于mysql的数据类型)
- 'uid' => [ 'type' => 'integer' // 字段类型为整型
- ], 'username' => [ 'type' => 'keyword' // 字段类型为关键字,如果需要全文检索,则修改为text,注意keyword字段为整体查询,不能作为模糊搜索
- ], 'platform' => [ 'type' => 'keyword'
- ], 'mobile' => [ 'type' => 'integer'
- ], 'sex' => [ 'type' => 'integer'
- ], 'source' => [ 'type' => 'keyword'
- ], 'province' => [ 'type' => 'keyword'
- ], 'city' => [ 'type' => 'keyword'
- ], 'tag' => [ 'properties' => [ 'tagName' =>[ 'type' => 'text'
- ], 'tagWeight' => [ 'type' => 'integer',
- ]
- ]
- ],
- ]
- ]
- ]
- ]
- ];
- $data = $client->indices()->create($params);
简单的索引就创建完毕了,现在我们可以获取下刚创建的索引信息.
- $params = [ 'index' => 'user_index', 'client' => [ 'ignore' => 404
- ]
- ];
- $res = $client->indices()->getSettings($params);//获取库索引设置信息
返回的结果如下:
- array ( 'user_index' =>
- array ( 'settings' =>
- array ( 'index' =>
- array ( 'creation_date' => '1498116455327', 'number_of_shards' => '5', 'number_of_replicas' => '1', 'uuid' => '8pkONoI7RAuw5HjnFa4UaQ', 'version' =>
- array ( 'created' => '5020299',
- ), 'provided_name' => 'user_index',
- ),
- ),
- ),
- )
接口:$client->indices()->getMapping
- $params = [ 'index' => 'user_index', 'client' => [ 'ignore' => 404
- ]
- ];
- $res = $client->indices()->getMapping($params); //获取mapping信息
返回的结果如下:
- array ( 'user_index' =>
- array ( 'mappings' =>
- array ( 'normal_type' =>
- array ( '_all' =>
- array ( 'enabled' => false,
- ), 'properties' =>
- array ( 'city' =>
- array ( 'type' => 'keyword',
- ), 'mobile' =>
- array ( 'type' => 'integer',
- ), 'platform' =>
- array ( 'type' => 'keyword',
- ), 'province' =>
- array ( 'type' => 'keyword',
- ), 'sex' =>
- array ( 'type' => 'integer',
- ), 'source' =>
- array ( 'type' => 'keyword',
- ), 'uid' =>
- array ( 'type' => 'integer',
- ), 'username' =>
- array ( 'type' => 'keyword',
- ),
- ),
- ),
- ),
- ),
- )
这里获取的相关信息就是我们刚刚创建的索引es可以动态的修改以及添加相关的信息.
注意事项:已经建立好的字段类型是不能更改的!!
接口:$client->indices()->putMapping();
- $params = [ 'index' => 'user_index', //索引名(相当于mysql的数据库)
- 'type' => 'normal_type', 'body' => [ 'normal_type' => [ 'properties' =>[ 'tag' =>[ 'type' => 'text'
- ]
- ]
- ]
- ]
- ];
- $client->indices()->putMapping($params);
接口:$client->indices()->delete($params);
- $params = [ 'index' => 'user_index', //索引名(相当于mysql的数据库)
- ];
单条数据插入
接口:$client->index()
- $params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id', // 不填则es会自动生成唯一的id
- 'body' => [ 'testField' => 'abc']
- ];
- $response = $client->index($params);
批量数据插入
接口:$client->bulk();
- foreach($userList as $value){
- $params['body'][] = [ 'index' => [ '_index' => 'user_index', '_type' => 'normal_type', '_id' =>$value['uid']
- ]
- ];
- $params['body'][] = [ 'uid' => $value['uid'], 'username' => $value['username'], 'platform' => $value['platform'], 'mobile' => $value['mobile'], 'province' => $value['province'], 'city' => $value['city'], 'sex' => $value['gender '], 'source'=>'xxx'
- ];
- }
- $responses = $client->bulk($params);
ps:当循环插入大量数据时,需要注意php的内存超出限制的问题.(还不清楚这个框架哪部分操作之后没有释放内存)
单条数据搜搜,但是需要知道id
接口:$client->get()
- $params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id' // es 自动生成/自己录入的];
- $response = $client->get($params);
批量搜索
接口:$client->search()
- $params = [
- 'index' => 'my_index', //['my_index1', 'my_index2'],可以通过这种形式进行跨库查询
- 'type' => 'my_type',//['my_type1', 'my_type2'],
- 'body' => [
- 'query' => [
- 'match' => [ // 搜索条件
- 'age' => '24' , 'tag.tagName' =>'tag' // 如果字段存储的是object.
- //这里搜索必须要这样才能搜索出结果.
- ]
- ],
- 'from' => '0', // 分页
- 'size' => '200' // 每页数量
- 'sort' => [ // 排序
- 'age' => 'desc' //对age字段进行降序排序
- ]
- ]
- ];
- $res = $client->search($params);
返回的数据大致如下:
- array (size=4) 'took' => int 2
- 'timed_out' => boolean false
- '_shards' =>
- array (size=3) 'total' => int 5
- 'successful' => int 5
- 'failed' => int 0
- 'hits' => // 搜索到数据
- array (size=3) 'total' => int 2
- 'max_score' => float 1
- 'hits' => // 具体数据包
- array (size=1) 0 =>
- array (size=5)
- ...
很多时候需要用到类似mysql的and/or 查询es搜索也能做到.
这个时候我们就要用到es的组合过滤器
https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-filters.html 官方文档如下
以下是测试过的一个例子
- { "index": "xxx_index",
- "type": "normal_type",
- "body": { "size": 20,
- "from": 0,
- "query": { "bool": { "must": [
- { "match": { "tag.tagName": "xxxx"
- }
- }
- ]
- }
- },
- "sort": { "uid": "desc"
- }
- }
- }
注意:数据删除的时候有一定的缓存更新时间,在没更新的时候还是能被搜索出来.
接口:$client->delete();
- $param = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id'
- ];
- $ret = $this->client->delete($param);
返回数据如下:
- array (size=7) 'found' => boolean true
- '_index' => string 'user_index' (length=10) '_type' => string 'normal_type' (length=11) '_id' => string 'AVzh_QnIZvcaH3gE7MvE' (length=20) '_version' => int 2
- 'result' => string 'deleted' (length=7) '_shards' =>
- array (size=3) 'total' => int 2
- 'successful' => int 1
- 'failed' => int 0
接口:$client->update()
- $params = [
- 'index' => 'my_index',
- 'type' => 'my_type',
- 'id' => '3416a75f4cea9109507cacd8e2f2aefc',
- 'body' => [
- 'doc' => [ // 必须带上这个.表示是文档操作
- 'age' => 150
- ]
- ]
- ];
- $res = $client->update($params);
返回结果
- array (size=6) '_index' => string 'user_index' (length=10) '_type' => string 'normal_type' (length=11) '_id' => string 'AVzh_QnIZvcaH3gE7Mw5' (length=20) '_version' => int 2
- 'result' => string 'updated' (length=7) '_shards' =>
- array (size=3) 'total' => int 2
- 'successful' => int 1 // 当数据没有发生变化时这里是为0
- 'failed' => int 0
注意:不同索引之间倒数据时,需要注意字段的类型,类型不一样会导致导入失败,这个时候可以使用script进行处理
此接口不能再phpapi中运行,作为记录存在
接口:POST _reindex
- POST _reindex
- { "source": { "index": "user_profile"
- }, "dest": { "index": "user_prfile_v1"
- }, "script": { "inline": " ctx._source.tag=params.new_tags", "params": { "new_tags":{ "tagName":null, "tagWeight":0
- }
- }
- }
- }
作者:汤敏正
链接:https://www.jianshu.com/p/a2837f487de6
相关推荐:
php调用接口api的方法
论vue项目api相关代码的组织方式
以上就是Elasticsearch-PHP api简介的详细内容,更多请关注Gxl网其它相关文章!