Introduction à l'API Elasticsearch-PHP

不言
Libérer: 2023-03-23 16:18:01
original
2440 Les gens l'ont consulté

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.


1. Créer un index ($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);
Copier après la connexion

L'index simple est créé. les informations d'index nouvellement créées.

2. Obtenir les informations d'index

2.1 Obtenir les informations d'index ($client->indices()->getSettings())

     $params = [                'index' => 'user_index',                'client' => [                    'ignore' => 404
                ]
            ];
    $res = $client->indices()->getSettings($params);//获取库索引设置信息
Copier après la connexion

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',
        ),
      ),
    ),
 )
Copier après la connexion

2.2 Obtenir les informations de mappage

  • Interface : $client->indices()->getMapping

$params = [                'index' => 'user_index',                'client' => [                    'ignore' => 404
                ]
            ];
$res = $client->indices()->getMapping($params);   //获取mapping信息
Copier après la connexion

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',
          ),
        ),
      ),
    ),
  ),
)
Copier après la connexion

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.

2.3 Modifier/ajouter des informations de cartographie

  • 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);
Copier après la connexion

2.4 Supprimer l'index

  • Interface : $client->indices( )->delete($params);

        $params = [            'index' => 'user_index',  //索引名(相当于mysql的数据库)
        ];
Copier après la connexion

3 es ajout, suppression, modification et requête

3.1 Ajout de données

  • 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);
Copier après la connexion
  • 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);
Copier après la connexion
  • 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)

3.2 Données de recherche

  • 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);
Copier après la connexion
  • 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);
Copier après la connexion

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)
              ...
Copier après la connexion
  • 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"
        }
    }
}
Copier après la connexion

3.3 Supprimer les données

  • 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);
Copier après la connexion

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
Copier après la connexion

3.4 Mettre à jour les données

  • Interface : $client->update()

$params = [  
    'index' => 'my_index',  
    'type' => 'my_type',  
    'id' => '3416a75f4cea9109507cacd8e2f2aefc',  
    'body' => [  
        'doc' => [  // 必须带上这个.表示是文档操作
            'age' => 150  
        ]  
    ]  
];  
$res = $client->update($params);
Copier après la connexion

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
Copier après la connexion

4. Inverser les données entre différents index

  • 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 _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
      }
    }
  }
}
Copier après la connexion
Auteur : Tang Minzheng

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal