校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Laravel + Elasticsearch 實現中文搜索的方法

Laravel + Elasticsearch 實現中文搜索的方法

熱門標簽:山西回撥外呼系統 騰訊外呼管理系統 岳陽外呼型呼叫中心系統在哪里 百應電話機器人服務 揚州地圖標注app 山西探意電話機器人 河南電銷卡外呼系統哪家強 青島語音外呼系統招商 昭通辦理400電話

Elasticsearch

Elasticsearch 是一個基于 Apache Lucene(TM) 的開源搜索引擎,無論在開源還是專有領域,Lucene可 以被認為是迄今為止最先進、性能最好的、功能最全的搜索引擎庫。

但是,Lucene 只是一個庫。想要發揮其強大的作用,你需使用 Java 并要將其集成到你的應用中。Lucene 非常復雜,你需要深入的了解檢索相關知識來理解它是如何工作的。

Elasticsearch 也是使用 Java 編寫并使用 Lucene 來建立索引并實現搜索功能,但是它的目的是通過簡單連貫的 RESTful API 讓全文搜索變得簡單并隱藏 Lucene 的復雜性。

不過,Elasticsearch 不僅僅是 Lucene 和全文搜索引擎,它還提供:

  • 分布式的實時文件存儲,每個字段都被索引并可被搜索
  • 實時分析的分布式搜索引擎
  • 可以擴展到上百臺服務器,處理PB級結構化或非結構化數據

而且,所有的這些功能被集成到一臺服務器,你的應用可以通過簡單的 RESTful API、各種語言的客戶端甚至命令行與之交互。上手 Elasticsearch 非常簡單,它提供了許多合理的缺省值,并對初學者隱藏了復雜的搜索引擎理論。它開箱即用(安裝即可使用),只需很少的學習既可在生產環境中使用。

Elasticsearch 在 Apache 2 license 下許可使用,可以免費下載、使用和修改。

ElasticSearch 安裝

在 Laradock 中已經集成了 ElasticSearch。我們可以直接使用:

docker-compose up -d elasticsearch

如果需要安裝插件,執行命令:

docker-compose exec elasticsearch /usr/share/elasticsearch/bin/elasticsearch-plugin install {plugin-name}

// 重啟容器
docker-compose restart elasticsearch

注:

The vm.max_map_count kernel setting must be set to at least 262144 for production use.

由于我是 centos 7 環境,直接設置在系統設置:
sysctl -w vm.max_map_count=262144

默認用戶名和密碼:「elastic」、「changeme」,端口號:9200

ElasticHQ

ElasticHQ is an open source application that offers a simplified interface for managing and monitoring Elasticsearch clusters.

Management and Monitoring for Elasticsearch.

http://www.elastichq.org/

  • Real-Time Monitoring
  • Full Cluster Management
  • Full Cluster Monitoring
  • Elasticsearch Version Agnostic
  • Easy Install - Always On
  • Works with X-Pack

輸入我們的 Elasticsearch Host,即可進入后臺。

默認的創建了:

一個集群 cluster:laradock-cluster
一個節點 node:laradock-node
一個索引 index:.elastichq

IK 分詞器安裝

ElasticSearch 主要是用于自己 blog 或者公眾號文章的搜索使用,所以需要選擇一個中文分詞器配合使用,這里剛開始推薦使用 IK 分詞器,下面開始安裝對應 ElasticSearch版本 (7.5.1) 一致的插件:

https://github.com/medcl/elasticsearch-analysis-ik/releases

// 安裝插件
docker-compose exec elasticsearch /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip

注:可以將 zip 文件先下載回來,然后再安裝,速度會快些。

檢驗分詞效果

根據 Elasticsearch API 測試,分詞的效果達到了:

 ~ curl -X POST "http://your_host/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
 "analyzer": "ik_max_word",
 "text":   "我是中國人"
}
'

{
 "tokens" : [
  {
   "token" : "我",
   "start_offset" : 0,
   "end_offset" : 1,
   "type" : "CN_CHAR",
   "position" : 0
  },
  {
   "token" : "是",
   "start_offset" : 1,
   "end_offset" : 2,
   "type" : "CN_CHAR",
   "position" : 1
  },
  {
   "token" : "中國人",
   "start_offset" : 2,
   "end_offset" : 5,
   "type" : "CN_WORD",
   "position" : 2
  },
  {
   "token" : "中國",
   "start_offset" : 2,
   "end_offset" : 4,
   "type" : "CN_WORD",
   "position" : 3
  },
  {
   "token" : "國人",
   "start_offset" : 3,
   "end_offset" : 5,
   "type" : "CN_WORD",
   "position" : 4
  }
 ]
}

結合 Laravel

雖然 Elasticsearch 官方提供了對應的 PHP 版本的插件,但我們還是希望和 Laravel 結合的更緊密些,所以這里選擇和 Scout 結合使用,具體用到了 tamayo/laravel-scout-elastic 插件。

composer require tamayo/laravel-scout-elastic
 
composer require laravel/scout
 
php artisan vendor:publish

選擇:Laravel\Scout\ScoutServiceProvider

修改驅動為 elasticsearch

'driver' => env('SCOUT_DRIVER', 'elasticsearch'),

創建索引

創建索引有幾種方法,其中可以使用 Ela 可視化工具 ElasticHQ 直接創建。

接下來我們需要更新這個索引,補充 Mappings 這部分,可以用 Postman。

另一種方法是用 Laravel 自帶的 Artisan 命令行功能。

這里我們推薦使用 Artisan 命令行。
php artisan make:command ESOpenCommand

根據官網提示,我們可以在 ESOpenCommand 上向 Elasticsearch 服務器發送 PUT 請求,這里借助 Elasticsearch 提供的 PHP 插件,在我們使用 tamayo/laravel-scout-elastic 插件時,已經安裝了 Elasticsearch PHP 插件:

下面就可以借助插件,創建我們的 Index,直接看代碼:

 public function handle()
  {
  $host = config('scout.elasticsearch.hosts');
  $index = config('scout.elasticsearch.index');
  $client = ClientBuilder::create()->setHosts($host)->build();

  if ($client->indices()->exists(['index' => $index])) {
    $this->warn("Index {$index} exists, deleting...");
    $client->indices()->delete(['index' => $index]);
  }

  $this->info("Creating index: {$index}");

  return $client->indices()->create([
    'index' => $index,
    'body' => [
      'settings' => [
        'number_of_shards' => 1,
        'number_of_replicas' => 0
      ],
      'mappings' => [
        '_source' => [
          'enabled' => true
        ],
        'properties' => [
          'id' => [
            'type' => 'long'
          ],
          'title' => [
            'type' => 'text',
            'analyzer' => 'ik_max_word',
            'search_analyzer' => 'ik_smart'
          ],
          'subtitle' => [
            'type' => 'text',
            'analyzer' => 'ik_max_word',
            'search_analyzer' => 'ik_smart'
          ],
          'content' => [
            'type' => 'text',
            'analyzer' => 'ik_max_word',
            'search_analyzer' => 'ik_smart'
          ]
        ],
      ]
    ]
  ]);
}

好了,我們執行 Kibana 看到我們已經創建好了 Index:

注 Kibana 本地 Docker 安裝:

后續會重點說明 Kibana 如何使用

docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://elasticsearch_host -p 5601:5601 -e SERVER_NAME=ki.test kibana:7.5.2

為了驗證 Index 是否可用,可以插入一條數據看看:

curl -XPOST your_host/coding01_open/_create/1 -H 'Content-Type:application/json' -d'
{"content":"中韓漁警沖突調查:韓警平均每天扣1艘中國漁船"}

可以通過瀏覽器看看對應的數據:

有了 Index,下一步我們就可以結合 Laravel,導入、更新、查詢等操作了。

Laravel Model 使用

Laravel 框架已經為我們推薦使用 Scout 全文搜索,我們只需要在 Article Model 加上官方所說的內容即可,很簡單,推薦大家看 Scout 使用文檔:https://learnku.com/docs/laravel/6.x/scout/5191,下面直接上代碼:

?php

namespace App;

use App\Tools\Markdowner;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Scout\Searchable;

class Article extends Model
{
  use Searchable;

  protected $connection = 'blog';
  protected $table = 'articles';
  use SoftDeletes;

  /**
   * The attributes that should be mutated to dates.
   *
   * @var array
   */
  protected $dates = ['published_at', 'created_at', 'deleted_at'];

  /**
   * The attributes that are mass assignable.
   *
   * @var array
   */
  protected $fillable = [
    'user_id',
    'last_user_id',
    'category_id',
    'title',
    'subtitle',
    'slug',
    'page_image',
    'content',
    'meta_description',
    'is_draft',
    'is_original',
    'published_at',
    'wechat_url',
  ];

  protected $casts = [
    'content' => 'array'
  ];

  /**
   * Set the content attribute.
   *
   * @param $value
   */
  public function setContentAttribute($value)
  {
    $data = [
      'raw' => $value,
      'html' => (new Markdowner)->convertMarkdownToHtml($value)
    ];

    $this->attributes['content'] = json_encode($data);
  }

  /**
   * 獲取模型的可搜索數據
   *
   * @return array
   */
  public function toSearchableArray()
  {
    $data = [
      'id' => $this->id,
      'title' => $this->title,
      'subtitle' => $this->subtitle,
      'content' => $this->content['html']
    ];

    return $data;
  }

  public function searchableAs()
  {
    return '_doc';
  }
}

Scout 提供了 Artisan 命令 import 用來導入所有已存在的記錄到搜索索引中。

php artisan scout:import "App\Article"

看看 Kibana,已存入 12 條數據,和數據庫條數吻合。

有了數據,我們可以測試看看能不能查詢到數據。

還是一樣的,創建一個命令:

class ElasearchCommand extends Command
{
  /**
   * The name and signature of the console command.
   *
   * @var string
   */
  protected $signature = 'command:search {query}';

  /**
   * The console command description.
   *
   * @var string
   */
  protected $description = 'Command description';

  /**
   * Create a new command instance.
   *
   * @return void
   */
  public function __construct()
  {
    parent::__construct();
  }

  /**
   * Execute the console command.
   *
   * @return mixed
   */
  public function handle()
  {
    $article = Article::search($this->argument('query'))->first();
    $this->info($article->title);
  }
}

這是我的 titles,我隨便輸入一個關鍵字:「清單」,看是否能搜到。

總結

整體完成了:

  • Elasticsearch 安裝;
  • Elasticsearch IK 分詞器插件安裝;
  • Elasticsearch 可視化工具 ElasticHQ 和 Kibana 的安裝和簡單使用;
  • Scout 的使用;
  • Elasticsearch 和 Scout 結合使用。

接下來就要將更多的內容存入 Elasticsearch 中,為自己的 blog、公眾號、自動化搜索等場景提供全文搜索。

參考

推薦一個命令行應用開發工具——Laravel Zero

Artisan 命令行 https://learnku.com/docs/laravel/6.x/artisan/5158

Scout 全文搜索 https://learnku.com/docs/laravel/6.x/scout/5191

How to integrate Elasticsearch in your Laravel App – 2019 edition https://madewithlove.be/how-to-integrate-elasticsearch-in-your-laravel-app-2019-edition/

Kibana Guide https://www.elastic.co/guide/en/kibana/index.html

elasticsearch php-api [https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html](https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Python操作Elasticsearch處理timeout超時
  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程詳解
  • python中的Elasticsearch操作匯總
  • 使用postman操作ElasticSearch的方法

標簽:銅川 湛江 婁底 黃南 鎮江 南陽 宜賓 寶雞

巨人網絡通訊聲明:本文標題《Laravel + Elasticsearch 實現中文搜索的方法》,本文關鍵詞  Laravel,Elasticsearch,實現,中文,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Laravel + Elasticsearch 實現中文搜索的方法》相關的同類信息!
  • 本頁收集關于Laravel + Elasticsearch 實現中文搜索的方法的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    久久久久久久久久看片| 成人精品国产一区二区4080| 欧美亚洲愉拍一区二区| 一个色妞综合视频在线观看| 91一区在线观看| 国产精品久久久久久久裸模| 色av成人天堂桃色av| 夜夜嗨av一区二区三区| 日韩一区二区三区在线观看| 国产美女在线观看一区| 亚洲三级电影全部在线观看高清| 日本二三区不卡| 日本人妖一区二区| 国产偷国产偷精品高清尤物| 91在线观看下载| 视频一区欧美精品| 久久久精品综合| 在线看一区二区| 蜜桃av一区二区在线观看| 久久免费午夜影院| 日本乱人伦aⅴ精品| 久久国产福利国产秒拍| 国产精品久线在线观看| 欧美乱妇23p| 懂色av一区二区三区免费观看| 一区av在线播放| 国产日韩亚洲欧美综合| 在线观看免费成人| 国产一二三精品| 亚洲国产日韩一级| 久久九九全国免费| 欧美片网站yy| 99久久免费视频.com| 美洲天堂一区二卡三卡四卡视频| 中文字幕制服丝袜一区二区三区| 日韩亚洲欧美在线观看| 成人毛片老司机大片| 青青草精品视频| 一级中文字幕一区二区| 中文字幕免费观看一区| 日韩精品一区二区三区在线观看| 在线观看成人小视频| 国模套图日韩精品一区二区 | 色av综合在线| 国产xxx精品视频大全| 美女视频网站久久| 一二三区精品福利视频| 国产精品污www在线观看| 91麻豆精品国产无毒不卡在线观看| 大白屁股一区二区视频| 蜜臀av性久久久久av蜜臀妖精| 亚洲自拍偷拍九九九| 亚洲欧洲一区二区在线播放| 欧美va日韩va| 欧美男男青年gay1069videost| 色综合久久久久久久久久久| 国产又黄又大久久| 韩国中文字幕2020精品| 日韩电影在线免费看| 亚洲一区二区在线免费看| 日韩美女精品在线| 国产精品久久久久影视| 国产亲近乱来精品视频| 亚洲精品一区二区三区99| 91精品国产综合久久婷婷香蕉 | 欧美一区二区日韩| 欧美电影一区二区| 欧美日韩免费视频| 欧美在线观看一区二区| 欧美亚洲另类激情小说| 色综合天天综合网国产成人综合天| 成人性生交大合| 成人激情综合网站| 99久久精品免费看国产免费软件| 国产乱码精品1区2区3区| 国产一区二区91| 国产在线精品免费| 国产电影一区二区三区| 丰满少妇久久久久久久| 国产成人午夜99999| 国产成人精品一区二| 成人免费精品视频| 91麻豆免费看| 欧美日韩午夜影院| 日韩欧美高清一区| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品丝袜黑色高跟| 亚洲色图都市小说| 亚洲一级二级在线| 青娱乐精品在线视频| 久久国产精品99久久久久久老狼 | 亚洲精品视频自拍| 亚洲综合在线视频| 日本中文在线一区| 久久99精品久久只有精品| 国产一区二区三区在线看麻豆| 成人久久久精品乱码一区二区三区| av电影在线观看完整版一区二区| 91丨九色丨蝌蚪丨老版| 欧美美女一区二区| www一区二区| 亚洲三级理论片| 天天射综合影视| 国产成人在线影院| 欧美日韩一区二区三区不卡| 日韩欧美一卡二卡| 中文字幕在线播放不卡一区| 亚洲国产精品久久久男人的天堂| 日韩成人一区二区三区在线观看| 国产一区三区三区| 色伊人久久综合中文字幕| 日韩欧美国产一区二区在线播放| 国产精品素人一区二区| 亚洲国产婷婷综合在线精品| 国产精品综合av一区二区国产馆| 91福利在线免费观看| 日韩一级高清毛片| 亚洲欧美综合在线精品| 蜜桃视频一区二区三区在线观看| 91在线一区二区三区| 欧美一区二区三区公司| 中文字幕在线不卡| 久久99精品国产91久久来源| 色婷婷综合五月| 国产亚洲成aⅴ人片在线观看| 一区二区三区四区在线| 国产精品一二二区| 欧美一区三区四区| 亚洲丝袜美腿综合| 狠狠色伊人亚洲综合成人| 日本道精品一区二区三区| 国产亚洲女人久久久久毛片| 婷婷久久综合九色国产成人| 99视频精品免费视频| 26uuu国产一区二区三区| 亚洲成人一区在线| 99久久婷婷国产精品综合| 2021中文字幕一区亚洲| 午夜精品福利一区二区蜜股av| 不卡区在线中文字幕| 久久色视频免费观看| 日韩av一二三| 欧日韩精品视频| 亚洲私人黄色宅男| 国产盗摄女厕一区二区三区| 欧美电影免费观看完整版| 午夜精品123| 欧美日韩国产高清一区| 亚洲一区二区三区三| 色婷婷综合视频在线观看| 中文字幕一区二区三区在线不卡 | 91麻豆精品国产自产在线| 亚洲精选视频在线| 99在线视频精品| 国产亚洲女人久久久久毛片| 国产一区二区三区免费| 精品理论电影在线观看| 麻豆精品一区二区| 日韩一级精品视频在线观看| 日本网站在线观看一区二区三区| 欧美日韩你懂的| 婷婷丁香久久五月婷婷| 51精品国自产在线| 日本午夜一区二区| 9191成人精品久久| 欧美a级一区二区| 欧美一级一区二区| 蜜臀av性久久久久av蜜臀妖精| 欧美一级高清大全免费观看| 日本va欧美va瓶| 日韩精品综合一本久道在线视频| 免费人成精品欧美精品| 精品欧美一区二区在线观看| 麻豆极品一区二区三区| 久久久国产午夜精品| 国产91在线观看| 国产精品国产三级国产普通话蜜臀 | 99免费精品在线| 一区二区在线免费| 欧美日韩一区二区三区不卡| 日本不卡中文字幕| 精品蜜桃在线看| 成人一道本在线| 亚洲精品五月天| 69堂国产成人免费视频| 狠狠久久亚洲欧美| 国产精品无码永久免费888| av在线播放不卡| 性感美女极品91精品| 欧美电影免费观看高清完整版| 国产大陆精品国产| 亚洲一区视频在线观看视频| 3d动漫精品啪啪1区2区免费| 国产一区二区三区黄视频 | 久久久www成人免费毛片麻豆| 国产一区二区三区免费| 中文字幕制服丝袜一区二区三区| 欧美色图激情小说| 国产一区二区三区最好精华液| 亚洲私人影院在线观看|