Maison >développement back-end >tutoriel php >Recherches PHP basées sur ElasticSearch

Recherches PHP basées sur ElasticSearch

angryTom
angryTomavant
2020-02-04 17:20:504067parcourir

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.

Recherches PHP basées sur ElasticSearch

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer