Maison >développement back-end >tutoriel php >Introduction à l'API Elasticsearch-PHP

Introduction à l'API Elasticsearch-PHP

不言
不言original
2018-04-13 09:13:172450parcourir

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);

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);//获取库索引设置信息

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',
        ),
      ),
    ),
 )

2.2 Obtenir les informations de mappage

  • 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.

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);

2.4 Supprimer l'index

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

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

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);
  • 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)

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);
  • 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"
        }
    }
}

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);

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

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);

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

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
      }
    }
  }
}
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!

Déclaration:
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