婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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 實現中文搜索的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一区二区高清视频在线观看| 韩国v欧美v日本v亚洲v| 国产精品嫩草久久久久| 亚洲第一精品在线| 国产丶欧美丶日本不卡视频| 成人网在线免费视频| 欧美在线短视频| 中文字幕欧美国产| 男男gaygay亚洲| 色噜噜狠狠成人中文综合| 国产精品毛片大码女人| 亚洲成人自拍网| 蜜桃精品视频在线| 国产福利一区二区三区在线视频| 97久久超碰国产精品| 91精品欧美福利在线观看| 欧美激情一区二区三区全黄| 亚洲国产精品久久人人爱| 国产精品系列在线观看| 欧美三级蜜桃2在线观看| 国产亚洲人成网站| 日韩在线一二三区| 91丝袜美女网| 久久亚区不卡日本| 成人免费福利片| 欧美在线一二三四区| 欧美精品一区二区在线观看| 一区二区三区精品视频在线| 国产美女主播视频一区| 在线看日本不卡| 国产欧美精品国产国产专区| 亚洲尤物在线视频观看| 国产一区二区三区精品欧美日韩一区二区三区 | 91性感美女视频| 亚洲精品在线观看网站| 亚洲国产成人高清精品| 99精品国产91久久久久久 | 久久激情五月婷婷| 欧美性做爰猛烈叫床潮| 国产精品免费观看视频| 精品一区二区三区免费播放| www.爱久久.com| 日韩精品高清不卡| 亚洲日本在线a| 欧美国产欧美亚州国产日韩mv天天看完整| 国产传媒一区在线| 爽爽淫人综合网网站| 久久午夜电影网| 欧美影视一区在线| 成人av高清在线| 国产在线精品视频| 日本免费在线视频不卡一不卡二| 亚洲成年人影院| 91美女蜜桃在线| 亚洲男人的天堂在线观看| av激情亚洲男人天堂| 国产精品三级久久久久三级| 成人午夜电影小说| 国产精品美女一区二区三区| 成人黄色免费短视频| 国产精品美女久久福利网站| 99精品欧美一区二区三区综合在线| 国产精品美女久久久久久| bt7086福利一区国产| 亚洲精品伦理在线| 欧美日韩亚洲综合| 老司机精品视频导航| 亚洲成人午夜电影| 欧美一三区三区四区免费在线看 | 国产欧美日本一区视频| 成人激情综合网站| 亚洲激情图片一区| 欧美日韩精品一区二区三区 | 精品日韩一区二区三区免费视频| 精品一区二区三区免费播放| 国产日韩欧美电影| aaa国产一区| 天天综合色天天| 精品精品欲导航| 波多野结衣一区二区三区| 亚洲精品视频免费观看| 91精品国产综合久久久久久久| 久久66热re国产| 国产精品欧美久久久久无广告| 色综合久久九月婷婷色综合| 日韩激情视频网站| 国产精品狼人久久影院观看方式| 在线观看亚洲精品| 久久国产日韩欧美精品| 亚洲色图欧美偷拍| 精品久久国产老人久久综合| 色哟哟精品一区| 久久精品国产免费| 成人性生交大合| 97se狠狠狠综合亚洲狠狠| 亚洲欧美自拍偷拍| 国产乱人伦偷精品视频免下载| 国产精品99久久久久久久女警| 色综合色狠狠天天综合色| 欧美色成人综合| 亚洲人成精品久久久久| 国产伦精品一区二区三区在线观看| 99久久精品国产导航| 欧美不卡一二三| 中文字幕二三区不卡| 国产精品亚洲一区二区三区妖精| 最新日韩在线视频| 91精品国产丝袜白色高跟鞋| 99久久99久久精品国产片果冻| 日韩国产精品91| 国产精品三级av在线播放| 欧美一级片在线观看| 99精品一区二区| 韩国av一区二区三区在线观看| 亚洲一区二区三区四区在线观看 | 天天操天天色综合| 国产精品每日更新在线播放网址| 亚洲色图一区二区| 久久精品人人做| 欧美tickling挠脚心丨vk| 欧美图片一区二区三区| 91小视频在线免费看| 国产成人久久精品77777最新版本| 日韩在线观看一区二区| 亚洲一级电影视频| 悠悠色在线精品| 亚洲欧美日韩综合aⅴ视频| 国产精品久久久久久久浪潮网站| 久久综合色综合88| 欧美精品在线一区二区| 欧美视频你懂的| 欧美性大战久久久| 欧美伊人久久大香线蕉综合69| 日本高清成人免费播放| 色婷婷综合久久久久中文 | 亚洲欧美日韩电影| 国产精品久久久久久一区二区三区| 久久综合狠狠综合久久激情| 日韩欧美一二三区| 日韩精品专区在线影院观看| 日韩欧美一区二区视频| 欧美一区二区三区免费观看视频| 亚洲美女精品一区| 欧美中文字幕不卡| 国产精品美女久久久久久久| 欧美成人a在线| 欧美日韩成人综合在线一区二区 | 18欧美乱大交hd1984| 不卡在线观看av| 国产伦精品一区二区三区视频青涩 | 欧美电视剧在线看免费| 欧美三级韩国三级日本一级| 欧美色爱综合网| 91精品国产一区二区三区蜜臀| 欧美一区二区人人喊爽| 精品嫩草影院久久| 国产亚洲成年网址在线观看| 国产精品久久久久天堂| 亚洲欧洲制服丝袜| 午夜精品福利一区二区三区av| 亚洲成人先锋电影| 精品一区二区三区香蕉蜜桃| 国产激情视频一区二区三区欧美 | 蜜桃91丨九色丨蝌蚪91桃色| 国内外成人在线| 国产成都精品91一区二区三| eeuss鲁片一区二区三区在线看| 色八戒一区二区三区| 91精品欧美一区二区三区综合在| 久久精品一区二区三区不卡牛牛 | 亚洲人成亚洲人成在线观看图片| 亚洲一级二级三级| 久久电影网电视剧免费观看| 成人av午夜电影| 制服丝袜亚洲播放| 欧美国产成人精品| 亚洲高清一区二区三区| 国产自产2019最新不卡| 91麻豆精品一区二区三区| 欧美一区二区性放荡片| 国产精品伦理在线| 亚洲成av人片一区二区三区| 国产精品18久久久久久久久久久久 | 亚洲自拍偷拍综合| 美国精品在线观看| 99国产精品视频免费观看| 8x8x8国产精品| 国产精品久久久久aaaa樱花 | 中文字幕在线不卡国产视频| 久久久久久久性| 在线成人午夜影院| 亚洲欧美日韩国产综合在线| 免费人成黄页网站在线一区二区| 99精品偷自拍| 国产喷白浆一区二区三区| 亚洲一区影音先锋| av中文字幕一区| 亚洲国产精品成人综合色在线婷婷| 天天射综合影视| 色一区在线观看|