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

主頁 > 知識庫 > 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 實現中文搜索的方法的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲国产精品一区二区久久恐怖片 | 欧美午夜不卡在线观看免费| 成人激情av网| 色94色欧美sute亚洲线路二 | 国产亚洲精品aa午夜观看| 久久久久久久久久久久久久久99| 久久久久久久久久看片| 国产精品天干天干在观线| 亚洲免费高清视频在线| 日日摸夜夜添夜夜添精品视频 | 国产精品视频九色porn| 日韩一区中文字幕| 国产午夜亚洲精品午夜鲁丝片| 欧美色中文字幕| 欧美一区二区三区男人的天堂| 欧美一区二区三区免费| 日本一区二区动态图| 国产精品拍天天在线| 国产精品无码永久免费888| 亚洲欧美日韩在线不卡| 午夜激情一区二区| 成人va在线观看| 欧美精品色综合| 国产女人水真多18毛片18精品视频| 中文字幕在线视频一区| 日韩电影在线观看一区| 成人激情视频网站| 欧美zozo另类异族| 亚洲成a人v欧美综合天堂| 国产福利精品一区二区| 欧美一区二区久久| 视频精品一区二区| 色呦呦国产精品| 亚洲国产精品传媒在线观看| 日韩不卡免费视频| 欧美精品tushy高清| 亚洲精品免费电影| 91看片淫黄大片一级在线观看| 欧美—级在线免费片| 久久成人麻豆午夜电影| 欧美日韩mp4| 午夜精品爽啪视频| 678五月天丁香亚洲综合网| 久久久久99精品国产片| 激情综合色播激情啊| 日韩视频免费观看高清完整版| 午夜欧美一区二区三区在线播放| 色综合久久天天综合网| 亚洲国产一区二区a毛片| 色悠久久久久综合欧美99| 亚洲午夜在线电影| 欧美日韩国产影片| 日本不卡123| 国产精品色一区二区三区| 色综合色综合色综合| 亚洲福利一区二区三区| 69av一区二区三区| 国产成人av自拍| 亚洲精品亚洲人成人网| 欧美午夜免费电影| 精品一区二区三区免费观看 | 亚洲欧洲精品天堂一级| 国产黄色成人av| 亚洲精品国产高清久久伦理二区| 欧美精品123区| 懂色av一区二区在线播放| 国产亚洲人成网站| 欧美影片第一页| 国产99久久久国产精品免费看 | 一卡二卡欧美日韩| 国产精品天天看| 欧洲国内综合视频| 国产揄拍国内精品对白| 亚洲国产综合色| 国产精品美女久久久久aⅴ| 91麻豆精品国产91久久久久久 | 欧美日韩激情一区二区| 岛国精品在线观看| 亚洲不卡av一区二区三区| 欧美激情一区二区三区四区| 日韩欧美在线不卡| 欧美日韩午夜影院| 色综合天天综合在线视频| 激情成人综合网| 精品一区二区精品| 一区二区三区**美女毛片| 国产精品久久久久久久浪潮网站 | 精品成人免费观看| 欧美午夜精品久久久久久超碰| 91浏览器打开| 91九色最新地址| 欧美精品粉嫩高潮一区二区| 成人午夜伦理影院| 97精品国产露脸对白| 不卡的av在线播放| 欧美调教femdomvk| 99re在线视频这里只有精品| 欧亚洲嫩模精品一区三区| 99久久精品国产麻豆演员表| 播五月开心婷婷综合| 欧美少妇bbb| 欧美午夜精品一区二区蜜桃| 7777精品伊人久久久大香线蕉 | 暴力调教一区二区三区| 成人动漫一区二区三区| 在线影院国内精品| 欧美一区二区三区免费在线看 | 欧美老肥妇做.爰bbww| 欧美一卡在线观看| 欧美激情自拍偷拍| 午夜精品久久久| 99免费精品视频| 色哟哟日韩精品| 国产日产精品一区| 一区精品在线播放| 久久国产精品无码网站| 色综合久久天天综合网| 国产午夜精品一区二区三区嫩草| 亚洲精品国产一区二区三区四区在线| 亚洲va中文字幕| av网站一区二区三区| 日韩三区在线观看| 亚洲午夜一二三区视频| 成人免费va视频| 精品国产亚洲在线| 日韩主播视频在线| 欧美日韩精品欧美日韩精品一 | 国产亚洲一区二区三区在线观看| 亚洲6080在线| 欧美日韩精品电影| 亚洲无人区一区| 欧美视频在线观看一区| 亚洲欧美成人一区二区三区| av在线不卡免费看| 国产精品欧美久久久久无广告 | 日本一不卡视频| 日韩欧美中文字幕精品| 9人人澡人人爽人人精品| 国产亲近乱来精品视频| 成人一级视频在线观看| 中文字幕在线不卡视频| 91热门视频在线观看| 亚洲一区二区三区四区在线观看 | 国产福利一区二区三区| 国产日韩欧美精品电影三级在线| 肉色丝袜一区二区| 久久精子c满五个校花| 国产suv一区二区三区88区| 亚洲欧美成aⅴ人在线观看| 欧美精品v国产精品v日韩精品| 久久www免费人成看片高清| 久久久久久亚洲综合影院红桃| 大美女一区二区三区| 亚洲永久精品大片| 日韩一区二区免费电影| 国产高清亚洲一区| 一区二区三区影院| 日韩精品一区二区三区蜜臀| 大胆欧美人体老妇| 亚洲va欧美va人人爽午夜| 欧美国产综合色视频| 欧美精品丝袜久久久中文字幕| 国产91精品一区二区麻豆亚洲| 亚洲综合免费观看高清完整版在线| 日韩一区二区三区观看| 91久久精品一区二区三区| 国产一区二区免费看| 成人av集中营| 偷拍日韩校园综合在线| |精品福利一区二区三区| 26uuu另类欧美| 欧美一级午夜免费电影| 欧美丝袜丝交足nylons| 成人av网站在线观看免费| 国产成人免费在线视频| 激情欧美一区二区| 毛片av一区二区三区| 日韩电影免费在线| 亚洲午夜久久久久久久久电影网| 中文字幕一区在线观看| 成人欧美一区二区三区小说 | 中文字幕亚洲电影| 国产精品传媒在线| 国产亚洲精品福利| 国产精品二区一区二区aⅴ污介绍| 制服丝袜一区二区三区| 欧美一区二区久久久| 欧美精品一区二区三区很污很色的| 欧美一区二区在线免费观看| 日韩欧美亚洲国产另类| 精品国产乱子伦一区| 久久网这里都是精品| 国产精品电影一区二区三区| 亚洲综合色丁香婷婷六月图片| 性做久久久久久久免费看| 韩国精品主播一区二区在线观看 | 一区二区三区四区在线免费观看 | 久久综合久久综合亚洲| 亚洲欧洲美洲综合色网| 久久99久久99精品免视看婷婷|