婷婷综合国产,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
    国产精品美女久久久久高潮| 91精品国模一区二区三区| 丝袜美腿高跟呻吟高潮一区| 中文在线一区二区| 国产亚洲人成网站| 精品国产免费人成电影在线观看四季 | 三级欧美韩日大片在线看| 亚洲麻豆国产自偷在线| 亚洲日本在线a| 日韩理论片在线| 亚洲在线观看免费视频| 亚洲激情综合网| 午夜私人影院久久久久| 日本欧美一区二区| 激情久久五月天| 成人午夜av影视| www.66久久| 欧美主播一区二区三区美女| 欧美午夜精品免费| 欧美一区二区三区小说| 精品久久人人做人人爽| 久久女同精品一区二区| 国产亚洲成aⅴ人片在线观看| 欧美激情综合在线| 一区二区三区中文在线观看| 亚洲国产综合色| 久久精品国产亚洲5555| 成人激情小说网站| 在线观看91视频| 91麻豆精品国产自产在线| 26uuu精品一区二区三区四区在线| 久久久久久99精品| 一区二区三区在线观看网站| 日韩av一级片| 成人精品高清在线| 9191国产精品| 国产精品伦理在线| 日韩av一区二区在线影视| 成人免费福利片| 欧美男人的天堂一二区| 久久综合999| 一区二区三区蜜桃| 极品少妇xxxx偷拍精品少妇| 91在线国产观看| 精品国产免费视频| 亚洲黄色在线视频| 国内精品免费在线观看| 色综合久久六月婷婷中文字幕| 91精品欧美一区二区三区综合在 | 91猫先生在线| 日韩三级电影网址| 亚洲欧美一区二区三区孕妇| 免费成人性网站| 欧美午夜精品免费| 国产精品国产a| 国产精品一区二区不卡| 日韩一二三区不卡| 亚洲自拍偷拍图区| av在线不卡免费看| 久久嫩草精品久久久精品一| 夜夜精品视频一区二区| 成人免费毛片片v| 久久久久久亚洲综合| 日韩精品久久理论片| 欧美三级乱人伦电影| 亚洲欧美电影院| 成人午夜私人影院| 国产亚洲一区二区在线观看| 日本三级亚洲精品| 欧美一区二区三区在线观看视频 | 精品一区二区三区日韩| 欧美日韩一区二区不卡| 中文字幕在线不卡一区| 国产精品18久久久久久久网站| 欧美一区在线视频| 免费的国产精品| 91麻豆精品国产自产在线观看一区| 亚洲国产精品久久久男人的天堂 | 日本一区二区三级电影在线观看| 久久99久久精品| 337p日本欧洲亚洲大胆色噜噜| 日本中文一区二区三区| 欧美丰满少妇xxxxx高潮对白| 亚洲精品乱码久久久久| 91高清视频在线| 首页国产欧美久久| 欧美不卡一二三| 国产电影精品久久禁18| 国产蜜臀97一区二区三区| 97精品久久久久中文字幕 | 一区二区三区在线观看国产 | 日韩一本二本av| 国产一区二区电影| 中文字幕亚洲在| 欧美自拍偷拍午夜视频| 日韩1区2区3区| 国产日韩亚洲欧美综合| 99精品视频在线免费观看| 亚洲综合成人在线视频| 91精品国产综合久久福利| 久久国产精品99久久久久久老狼 | 色婷婷亚洲综合| 亚洲在线成人精品| 欧美在线你懂得| 日韩激情av在线| 日韩精品一区二区三区swag| 日精品一区二区| 欧美激情一区三区| 97国产一区二区| 亚洲精品乱码久久久久久| 欧美日韩一区在线| 日韩av电影免费观看高清完整版 | 中文成人av在线| 成人性视频免费网站| 国产日韩成人精品| 99久久久国产精品免费蜜臀| 综合亚洲深深色噜噜狠狠网站| a美女胸又www黄视频久久| 亚洲欧洲日韩av| 精品污污网站免费看| 免费在线观看一区二区三区| 制服丝袜在线91| 国产精品69久久久久水密桃| 欧美激情综合五月色丁香小说| 国内成+人亚洲+欧美+综合在线| 中文字幕成人在线观看| 91色婷婷久久久久合中文| 亚洲制服丝袜在线| 26uuu亚洲| 一本一道综合狠狠老| 亚洲国产欧美在线人成| 中文字幕一区二区三区色视频| 一本久道久久综合中文字幕 | 欧美一区二区视频在线观看| 国产精品一二三| 亚洲丝袜精品丝袜在线| 久久久精品免费观看| 欧美性猛交xxxx黑人交| 国产综合色视频| 亚洲国产中文字幕| 91精品久久久久久久99蜜桃| 在线观看欧美日本| 高清不卡一区二区在线| 性欧美大战久久久久久久久| 国产女人aaa级久久久级| 欧美日韩亚洲综合一区二区三区| 成人午夜在线播放| 美国十次综合导航| 亚洲大片精品永久免费| 久久久99精品久久| 国产人久久人人人人爽| 日韩欧美国产麻豆| 欧美精品在线观看播放| 97se狠狠狠综合亚洲狠狠| 成人动漫在线一区| 国产精品中文欧美| 国精产品一区一区三区mba视频 | 亚洲一区二区视频| 国产欧美一区二区在线| 日韩欧美国产系列| 3751色影院一区二区三区| 欧美性极品少妇| 日韩一级二级三级精品视频| 欧美天堂亚洲电影院在线播放| 成人一级片网址| 成人综合婷婷国产精品久久免费| 美国欧美日韩国产在线播放| 韩国女主播一区二区三区| 日本女人一区二区三区| 天天射综合影视| 亚洲高清久久久| 天天av天天翘天天综合网色鬼国产| 日韩电影网1区2区| 日韩av电影一区| 蜜桃av噜噜一区二区三区小说| 亚洲国产精品久久不卡毛片 | 国产suv精品一区二区6| 99久久综合精品| 色婷婷综合五月| 欧美三区免费完整视频在线观看| 欧美在线视频你懂得| 欧美日韩精品三区| 欧美一区二区成人6969| 在线视频一区二区三区| 91.com在线观看| 精品国产一二三| 中文字幕一区二区三区色视频 | 亚洲超碰精品一区二区| 韩国在线一区二区| 国产ts人妖一区二区| 色999日韩国产欧美一区二区| 色94色欧美sute亚洲线路一久| 欧美电影免费提供在线观看| 国产午夜亚洲精品理论片色戒| 国产欧美视频一区二区| 亚洲丝袜精品丝袜在线| 亚洲国产精品一区二区久久| 久久精工是国产品牌吗| av中文字幕不卡| 欧美一区在线视频|