ElasticSearch est un serveur de recherche basé sur Lucene. Il fournit un moteur de recherche en texte intégral distribué multi-utilisateurs basé sur une interface Web RESTful. Développé en Java et publié en open source selon les termes de la licence Apache, Elasticsearch est un moteur de recherche populaire au niveau des entreprises. Conçu pour être utilisé dans le cloud computing, il permet d'effectuer une recherche en temps réel, est stable, fiable, rapide et facile à installer et à utiliser.
Recommandation de cours → : "Elasticsearch Full Text Search Practice" (Vidéo pratique)
Extrait du cours "Solution concurrente pour des dizaines de millions de données (théorique + pratique)"
Recherche PHP basée sur ElasticSearch
Le faire Lors de la recherche, j'ai pensé à ElasticSearch , et il prend également en charge PHP, alors j'ai fait un exemple simple pour tester Ça faisait du bien, alors j'ai fait un enregistrement.
Environnement
php 7.2
elasticsearch 6.2 Télécharger
elasticsearch-php 6 Télécharger
Installez elasticsearch
Téléchargez le fichier source, décompressez-le, créez un nouvel utilisateur et remplacez le groupe du répertoire par cet utilisateur, car elasticsearch ne peut pas être démarré avec l'utilisateur root.
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz tar zxvf elasticsearch-6.2.3.tar.gz useradd elasticsearch password elasticsearch chown elasticsearch:elasticsearch elasticsearch-6.2.3 cd elasticsearch-6.2.3 ./bin/elasticsearch // 启动
Installer l'extension PHP
J'utilise composer Installer elasticsearch-php. Ajoutez "elasticsearch/elasticsearch": "~6.0" au fichier composer.json et exécutez la composer update.
{ "require": { // ... "elasticsearch/elasticsearch": "~6.0" // ... } }
Exemple de test
Créer un tableau et tester des données
J'ai préparé un tableau d'articles pour les tests. Le premier est. pour créer un tableau, puis écrivez les données de test. Une fois la préparation terminée, commencez à éditer les cas de test.
create table articles( id int not null primary key auto_increment, title varchar(200) not null comment '标题', content text comment '内容' ); insert into articles(title, content) values ('Laravel 测试1', 'Laravel 测试文章内容1'), ('Laravel 测试2', 'Laravel 测试文章内容2'), ('Laravel 测试3', 'Laravel 测试文章内容3');
Lire les données de Mysql
try { $db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root'); $sql = 'select * from articles'; $query = $db->prepare($sql); $query->execute(); $lists = $query->fetchAll(); print_r($lists); } catch (Exception $e) { echo $e->getMessage(); }
Instanciation
require './vendor/autoload.php'; use Elasticsearch\ClientBuilder; $client = ClientBuilder::create()->build();
Explication du nom : L'index est équivalent àMySQL Les tables et les documents dans sont équivalents aux enregistrements de ligne dans MySQL La nature dynamique de
elasticsearch crée automatiquement un index lorsque le premier document est ajouté. . et quelques paramètres par défaut.
Ajouter un document à l'index
foreach ($lists as $row) { $params = [ 'body' => [ 'id' => $row['id'], 'title' => $row['title'], 'content' => $row['content'] ], 'id' => 'article_' . $row['id'], 'index' => 'articles_index', 'type' => 'articles_type' ]; $client->index($params); }
Obtenir le document de l'index
$params = [ 'index' => 'articles_index', 'type' => 'articles_type', 'id' => 'articles_1' ]; $res = $client->get($params); print_r($res);
Supprimer le document de l'index
$params = [ 'index' => 'articles_index', 'type' => 'articles_type', 'id' => 'articles_1' ]; $res = $client->delete($params); print_r($res);
Supprimer l'index
$params = [ 'index' => 'articles_index' ]; $res = $client->indices()->delete($params); print_r($res);
Créer un index
$params['index'] = 'articles_index'; $params['body']['settings']['number_of_shards'] = 2; $params['body']['settings']['number_of_replicas'] = 0; $client->indices()->create($params);
Rechercher
$params = [ 'index' => 'articles_index', 'type' => 'articles_type', ]; $params['body']['query']['match']['content'] = 'Laravel'; $res = $client->search($params); print_r($res);
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!