이 글은 Elasticsearch-PHP API에 대한 소개를 소개합니다. 이제 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.
Elasticsearch는 현재 널리 사용되는 빅데이터 처리 프레임워크 중 하나입니다. Baidu 등
다음 기사에서는 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/or Query es 검색도 가능합니다.
이번에는 es 조합 필터를 사용하겠습니다
https://www.elastic.co/guide/cn/elasticsearch/guide/current/ Combine-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
참고: 서로 다른 인덱스 간에 데이터를 반전하는 경우 필드 유형에 주의해야 합니다. 유형이 다르면 가져오기가 실패할 수 있습니다. 이때 처리용 스크립트를 사용할 수 있습니다
이 인터페이스입니다. 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 } } } }
저자: Tang Minzheng
링크:https://www.jianshu.com /p/a2837f487de6
관련 권장사항:
에서 인터페이스 API를 호출하는 방법위 내용은 Elasticsearch-PHP API 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!