<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實戰(zhàn)!聊聊PHP如何使用 ElasticSearch 做搜索

          共 2951字,需瀏覽 6分鐘

           ·

          2021-10-22 00:04

          點擊進入【碼農(nóng)編程進階筆記】
          免費獲取進階面試題、文檔、視頻資源

          ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是當前流行的企業(yè)級搜索引擎。設計用于云計算中,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便。


          在做搜索的時候想到了 ElasticSearch ,而且其也支持 PHP,所以就做了一個簡單的例子做測試,感覺還不錯,做下記錄。


          環(huán)境

          php 7.2

          elasticsearch 6.2?

          elasticsearch-php 6?


          安裝 elasticsearch

          下載源文件,解壓,重新建一個用戶,將目錄的所屬組修改為此用戶,因為 elasticsearch 無法用 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??//?啟動


          安裝 PHP 擴展

          我這里使用的是 composer 安裝 elasticsearch-php。在 composer.json 文件中加入 "elasticsearch/elasticsearch": "~6.0",執(zhí)行 composer update。

          {
          ??"require":?{
          ????//?...
          ????"elasticsearch/elasticsearch":?"~6.0"
          ????//?...
          ??}
          }


          測試例子

          創(chuàng)建表和測試數(shù)據(jù)

          我這里準備了一張文章表來進行測試,首先是建表,其次寫入測試數(shù)據(jù),準備工作完畢之后,就開始編輯測試用例。

          #創(chuàng)建articles表
          create?table?articles(
          ??id?int?not?null?primary?key?auto_increment,
          ??title?varchar(200)?not?null?comment?'標題',
          ??content?text?comment?'內(nèi)容'
          );

          #插入文章內(nèi)容;獲取更多視頻資源,微信搜索公眾號:【碼農(nóng)編程進階筆記】
          insert?into?articles(title,?content)?values?('Laravel?測試1',?'Laravel?測試文章內(nèi)容1'),('Laravel?測試2',?'Laravel?測試文章內(nèi)容2'),('Laravel?測試3',?'Laravel?測試文章內(nèi)容3');



          從 Mysql 讀取數(shù)據(jù)

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


          實例化

          require?'./vendor/autoload.php';
          use?Elasticsearch\ClientBuilder;
          $client?=?ClientBuilder::create()->build();


          名詞解釋索引相當于 MySQL 中的表,文檔相當于 MySQL 中的行記錄

          elasticsearch 的動態(tài)性質(zhì),在添加第一個文檔的時候自動創(chuàng)建了索引和一些默認設置。


          將文檔加入索引

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


          從索引中獲取文檔

          $params?=?[
          ??'index'?=>?'articles_index',
          ??'type'?=>?'articles_type',
          ??'id'?=>?'articles_1'
          ];
          $res?=?$client->get($params);
          print_r($res);


          從索引中刪除文檔

          $params?=?[
          ??'index'?=>?'articles_index',
          ??'type'?=>?'articles_type',
          ??'id'?=>?'articles_1'
          ];
          $res?=?$client->delete($params);
          print_r($res);


          刪除索引

          $params?=?[
          ????'index'?=>?'articles_index'
          ];
          $res?=?$client->indices()->delete($params);
          print_r($res);


          創(chuàng)建索引

          $params['index']?=?'articles_index';??
          $params['body']['settings']['number_of_shards']?=?2;??
          $params['body']['settings']['number_of_replicas']?=?0;??
          $client->indices()->create($params);


          搜索

          $params?=?[?
          ??'index'?=>?'articles_index',
          ??'type'?=>?'articles_type',
          ];??????

          $params['body']['query']['match']['content']?=?'Laravel';
          $res?=?$client->search($params);
          print_r($res);


          最后

          如果這篇文章對您有所幫助,或者有所啟發(fā)的話,幫忙掃描下發(fā)二維碼關注一下,您的支持是我堅持寫作最大的動力。求一鍵三連:點贊、轉(zhuǎn)發(fā)、在看

          瀏覽 61
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄片操B| 亚洲四色成人网站 | 色中色AV | 国产成人AV一区二区三区在线观看 | 二区日逼视频 |