Le contenu de cet article est une introduction à l'API Elasticsearch-PHP. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
Elasticsearch est actuellement disponible. populaire L'un des cadres de traitement du Big Data, des instructions détaillées peuvent être trouvées sur Baidu, etc.
Les articles suivants utilisent l'abréviation es comme représentant Elasticsearch
es a l'interface officielle de l'API php peut être téléchargée depuis github ou 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);
L'index simple est créé. les informations d'index nouvellement créées.
$params = [ 'index' => 'user_index', 'client' => [ 'ignore' => 404 ] ]; $res = $client->indices()->getSettings($params);//获取库索引设置信息
Renvoyé Les résultats sont les suivants :
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', ), ), ), )
Interface : $client->indices()->getMapping
$params = [ 'index' => 'user_index', 'client' => [ 'ignore' => 404 ] ]; $res = $client->indices()->getMapping($params); //获取mapping信息
Les résultats renvoyés sont les suivants :
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', ), ), ), ), ), )
Les informations pertinentes obtenues ici sont que l'index que nous venons de créer peut être modifié dynamiquement et ajouté avec les éléments pertinents. informations.
Remarque : les types de champs qui ont été établis ne peuvent pas être modifiés !!
Interface : $client-> ;indices()->putMapping();
$params = [ 'index' => 'user_index', //索引名(相当于mysql的数据库) 'type' => 'normal_type', 'body' => [ 'normal_type' => [ 'properties' =>[ 'tag' =>[ 'type' => 'text' ] ] ] ] ]; $client->indices()->putMapping($params);
Interface : $client->indices( )->delete($params);
$params = [ 'index' => 'user_index', //索引名(相当于mysql的数据库) ];
Insertion de données unique
Interface : $client->index()
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id', // 不填则es会自动生成唯一的id 'body' => [ 'testField' => 'abc'] ]; $response = $client->index($params);
Insérer des données par lots
Interface : $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 : lors de l'insertion dans une boucle Lorsque vous utilisez une grande quantité de données, vous devez faire attention au problème selon lequel la mémoire de PHP dépasse la limite (il n'est pas clair quelle partie de ce framework ne libère pas de mémoire. après l'opération)
Recherche de données uniques, mais vous devez connaître l'identifiant
Interface : $client->get()
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id' // es 自动生成/自己录入的]; $response = $client->get($params);
Recherche par lots
Interface : $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);
Les données renvoyées sont à peu près les suivantes :
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) ...
Plusieurs fois, vous besoin d'utiliser et/ou des requêtes comme mysql et la recherche es peuvent également être effectuées.
À ce stade, nous utiliserons le filtre combiné d'es
https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-filters.html Le document officiel est le suivant
Ce qui suit est un exemple testé
{ "index": "xxx_index", "type": "normal_type", "body": { "size": 20, "from": 0, "query": { "bool": { "must": [ { "match": { "tag.tagName": "xxxx" } } ] } }, "sort": { "uid": "desc" } } }
Remarque : Il y a un certain temps de mise à jour du cache lorsque les données sont supprimées, et elles peuvent toujours être recherchées lorsqu'il n'est pas mis à jour
Interface : $client->delete();
$param = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id' ]; $ret = $this->client->delete($param);
Les données renvoyées sont les suivantes. :
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
Interface : $client->update()
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => '3416a75f4cea9109507cacd8e2f2aefc', 'body' => [ 'doc' => [ // 必须带上这个.表示是文档操作 'age' => 150 ] ] ]; $res = $client->update($params);
Retourner les résultats
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
Remarque : différents index Lors du téléchargement de données, vous devez faire attention au type de champs différent. les types entraîneront l'échec de l'importation. À ce stade, vous pouvez utiliser un script pour traiter
Cette interface ne peut pas être exécutée en phpapi et existe sous forme d'enregistrement. 🎜>
Interface : POST _reindexPOST _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 } } } }
Lien :
https ://www.jianshu. com/p/a2837f487de6
Recommandations associées :
Méthode php d'appel de l'API de l'interface
Sur l'organisation du code lié à l'API du projet Vue
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!