这篇文章介绍的内容是关于elasticsearch-php api的简介,现在分享给大家,有需要的朋友可以参考一下
elasticsearch 是目前流行的大数据处理框架之一,详细的说明可以自行百度等.
以下文章采用es缩写作为代表elasticsearch
es有官方的php api接口,可以采用github下载或者composer.
1.创建索引($client->indices()->create()) $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);
简单的索引就创建完毕了,现在我们可以获取下刚创建的索引信息.
2.获取索引信息2.1 获取索引信息($client->indices()->getsettings()) $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',
),
),
),
)
2.2 获取mapping信息接口:$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可以动态的修改以及添加相关的信息.
2.3 修改/添加mapping信息注意事项:已经建立好的字段类型是不能更改的!!
接口:$client->indices()->putmapping();
$params = [ 'index' => 'user_index', //索引名(相当于mysql的数据库)
'type' => 'normal_type', 'body' => [ 'normal_type' => [ 'properties' =>[ 'tag' =>[ 'type' => 'text'
]
]
]
]
];
$client->indices()->putmapping($params);
2.4 删除索引接口:$client->indices()->delete($params);
$params = [ 'index' => 'user_index', //索引名(相当于mysql的数据库)
];
3 es的增删改查3.1 增加数据单条数据插入
接口:$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的内存超出限制的问题.(还不清楚这个框架哪部分操作之后没有释放内存)
3.2 搜索数据单条数据搜搜,但是需要知道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"
}
}
}
3.3 删除数据注意:数据删除的时候有一定的缓存更新时间,在没更新的时候还是能被搜索出来.
接口:$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
3.4 更新数据接口:$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
4.不同索引之间进行倒数据注意:不同索引之间倒数据时,需要注意字段的类型,类型不一样会导致导入失败,这个时候可以使用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简介的详细内容。