elastic學習筆記

要點

不同工具之間版本匹配很重要
由點及面,先實踐起來再學細節的原理和使用

技術棧


laravel5.5框架+scout組件+elasticsearch6.3.0搜索引擎

輔助


elasticsearch-head 查看集群數據可視化
中文分詞插件Ik

介紹

laravel是一款現代化的php框架
es是搜索引擎
es-head是管理查看使用es的圖形界面工具
scout是laravel一款優秀的組件

安裝流程

laravel

laravel安裝器安裝:

laravel new larasearch

配置env文件:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=julyedu
DB_USERNAME=root
DB_PASSWORD=123456

這時php artisan命令啟動,訪問127.0.0.1:8000 就可以看到項目首頁了。

es

在es的官網挑選一個合適的版本,建議選擇6.3.0,以便配套使用IK和ES-head。


# 下載
https://www.elastic.co/downloads/past-releases

IK

1.直接plugin命令安裝


./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

2.配置修改ik的版本適應es6.3.1,修改文件plugin-descriptor.properties,config文件夾下的配置文件主要是IK本身暫時不需要修改,這個properties文件主要是和es交互,修改其es版本和jdk版本號


# 修改elasticsearch-head/plugin-descriptor.properties文件
description=head - A web front end for an elastic search cluster
version=6.3.1
site=true
name=analysis-ik
classname=org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin
java.version=1.8
elasticsearch.version=6.3.1 

es-head

head是基于node開發的,所以需要先安裝node
node下載地址:http://cdn.npm.taobao.org/dis...

在電腦任意一個目錄下(不要在elasticsearch目錄里面),執行一下命令,


git clone https://github.com/mobz/elasticsearch-head.git  
cd elasticsearch-head/  
npm install  

為了es-head可以訪問es,所以需要配置跨域:

修改兩個地方:


#elasticsearch-headGruntfile.js
connect: {server: {options: {port: 9100,hostname: '*',base: '.',keepalive: true}}
}#elasticsearch-5.6.0configelasticsearch.yml
http.cors.enabled: true  
http.cors.allow-origin: "*"  

scout

通過composer安裝依賴包


composer require laravel/scout
composer require tamayo/laravel-scout-elastic

基本配置

在config/app.php文件中的providers數組中加入服務提供者


// config/app.php
'providers' => [// ...Laravel\Scout\ScoutServiceProvider::class,// ...ScoutEngines\Elasticsearch\ElasticsearchProvider::class,
],

使用以下命令生成scout配置文件


php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

在config/scout.php中加入elasticsearch的配置


'elasticsearch' => ['index' => env('ELASTICSEARCH_INDEX', 'laravel'),'hosts' => [env('ELASTICSEARCH_HOST', 'http://localhost:9200'),],
],

然后我們打開.env文件,加入scout和elasticsearch的配置


# scout配置
SCOUT_DRIVER=elasticsearch
SCOUT_PREFIX=# elasticsearch 配置
ELASTICSEARCH_INDEX=esdemo
# elasticsearch 地址
ELASTICSEARCH_HOST=http://172.30.6.1:9200

相關文檔地址

laravel scout中文文檔地址:https://laravel-china.org/doc...
es中文文檔地址:https://www.elastic.co/guide/...
es6.3.0地址:https://www.elastic.co/downlo...
IK github地址:https://github.com/medcl/elas...

啟動并查看

啟動es


./bin/elasticsearch

地址


http://127.0.0.1:9200/

啟動es-head


npm run start

地址


http://127.0.0.1:9100

啟動laravel項目


php artisan serve

地址


http://127.0.0.1:8000/es/s?page=1

測試執行

創建索引

創建模型并填充數據

創建模型app/Ques.php,為方便后續測試,請先建表和填充數據,可以手動使用sql語句添加數據,也使用laravel自動的數據遷移和填充。


<?php
namespace App;use Illuminate\Database\Eloquent\Model;use Laravel\Scout\Searchable;/*** 學生模型*/
class Ques extends Model
{use Searchable;//定義關聯的表名,不定義的話默認此模型關聯的表為 模型名s (users)protected $table = 'aws_ques_tb_0';/******字段相關*******/#定義主鍵字段名,默認是idprotected $primaryKey = 'id';#定義字段白名單,允許操作表中的哪些字段// protected $fillable = ['ques','name'];#定義字段黑名單,不允許操作表中哪些字段protected $guarded = [];//1、使用model::create([])等方法直接對orm對象操作使,必須定義$guarded或者$fillable//2、使用$m = new model();然后$m->save()的方式不需要定義//3、簡便的方式就是定義$fillable = [];#定義隱藏的字段protected $hidden = [];/*** 索引名稱** @return string*/public function searchableAs(){return 'ques_index';}/*** 索引名稱** @return string*/public function searchableAs(){return 'Quess_index';}/*** 可搜索的數據索引** @return array*/public function toSearchableArray(){$array = $this->toArray();// Customize array...return $array;}
}

把所有現有記錄導入到搜索索引里


php artisan scout:import "App\Ques"

導入過程


Imported [App\Ques] models up to ID: 500
Imported [App\Ques] models up to ID: 1000
Imported [App\Ques] models up to ID: 1500
Imported [App\Ques] models up to ID: 2000All [App\Ques] records have been imported.

我們訪問es,是不是已經有了剛剛導入的Quess_index索引數據。


http://172.30.6.1:9200/esdemo/Ques_index/_search

試試搜索

在route/web.php中寫個demo,試試看;


Route::get('/search/{content}', function ($content) {//直接輸出數組data,限制1000條// $res = App\Ques::search($content)->take(1000)->get()->toArray();// 分頁請求  http://127.0.0.1:8000/es/機器學習?page=1$res = App\Ques::search($content)->paginate(100)->toArray();dd($res);});

大功告成

輸出:


array:12 [▼"current_page" => 1"data" => array:9 [▼0 => array:9 [▼"id" => 922"ques" => "哪些機器學習算法不需要做歸一化處理?""analysis" => """概率模型不需要歸一化,因為它們不關心變量的值,而是關心變量的分布和變量之間的條件概率,如決策樹、rf。而像adaboost、svm、lr、KNN、KMeans之類的最優化問題就需要歸一化。\r\n我理解歸一化和標準化主要是為了使計算更方便 比如兩個變量的量綱不同 可能一個的數值遠大于另一個那么他們同時作為變量的時候 可能會造成數值計算的問題,比如說求矩陣的逆可能很不精確 或者梯度下降法的收斂比較困難,還有如果需要計算歐式距離的話可能 量綱也需要調整 所以我估計lr 和 knn 保準話一下應該有好處。至于其他的算 ?一般我習慣說樹形模型,這里說的概率模型可能是差不多的意思。引用自@寒小陽""""type_id" => 3"diff" => 0"isdelete" => 1"created_time" => "2017-12-10 18:57:13""update_time" => "0000-00-00 00:00:00""is_show" => 1]1 => array:9 [?]2 => array:9 [?]3 => array:9 [?]4 => array:9 [?]5 => array:9 [?]6 => array:9 [?]7 => array:9 [?]8 => array:9 [?]]"first_page_url" => "http://127.0.0.1:8000/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0?query=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&page=1""from" => 1"last_page" => 1"last_page_url" => "http://127.0.0.1:8000/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0?query=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&page=1""next_page_url" => null"path" => "http://127.0.0.1:8000/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0""per_page" => 100"prev_page_url" => null"to" => 9"total" => 9
]

參考

PHP使用elasticsearch搜索安裝及分詞方法【https://segmentfault.com/a/11...】

Laravel中利用Scout集成Elasticsearch搜索引擎【https://segmentfault.com/a/11...】

全文搜索引擎 Elasticsearch 入門教程【http://www.ruanyifeng.com/blo...】

laravel使用ElasticSearch進行搜索【https://blog.csdn.net/lingche...】

elasticsearch6.3.1+IK插件安裝部署全攻略【https://blog.csdn.net/superhe...】

原文地址:https://segmentfault.com/a/1190000016468707

轉載于:https://www.cnblogs.com/lalalagq/p/9970068.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249009.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249009.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249009.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 存儲過程中limit

mysql 存儲過程中limit 1、mysql的高版本(5.5),存儲過程中的limit可以使用變量,如下:select * from student limit iStart,iNum; 2、mysql的低版本(5.1),存儲過程中的limit不能使用…

高頻ES6

var promise new Promise((resolve, reject)> {if (操作成功) {resolve (value)}else{reject(error)} }) promise.than(function (value) {/*成功*/}, function(value) {/*失敗*/}) Promise是異步編程的一種解決方案, 比傳統的解決方案--回調函數和事件更加強大.由社區最早…

NodeJS+Express+MongoDB - 張果 - 博客園

目錄 一、MongoDB 1.1、安裝MongoDB 1.1.1、配置運行環境1.1.2、運行MongoDB1.2、數據庫操作 1.2.1、創建數據庫與查看數據庫1.2.2、刪除數據庫1.2.3、插入數據1.2.4、查詢數據1.2.5、修改1.2.6、刪除二、NodeJS訪問MongoDB 2.1、安裝MongoDB訪問驅動2.2、添加數據2.3、修改數…

一個好用的瀏覽器暗色瀏覽插件 Dark Reader

轉載于:https://www.cnblogs.com/tyong/p/9973363.html

Android小測驗感受

1.運行出現“...keeps stopping” 因為 前臺變量“無值”而后臺卻進行“獲取變量值” 2.switch(int,char...) case break;(不能忘) 3.轉載于:https://www.cnblogs.com/tangxx1996/p/10825134.html

SpringMVC ?注解式傳遞Ztree參數

前端頁面JS處理: $("#save").click( function(){var zTree $.fn.zTree.getZTreeObj("treeDemo" );if(projectType "" || projectType null || projectType undefined){alert( "請選擇項目類型!" ); return…

實驗 4 [bx]和 loop 的使用

實驗結論 實驗1:綜合使用 loop,[bx],編寫完整匯編程序,實現向內存 b800:07b8 開始的連續 16 個字單元重復填充字數據 0403H。 1.源代碼及實驗結果 運行結果:屏幕中央出現一排紅色的心?。 2.將源代碼程序中字數據 0403H→修改為 0…

linux開發工具之gcc

首先gcc編譯鏈接的一個實例如下所示: 接下來看一下gcc的常見選項: gcc的使用示例: 轉載于:https://www.cnblogs.com/wsw-seu/p/10826124.html

怎么解決eclipse報PermGen space異常的問題

怎么解決eclipse報PermGen space異常的問題 最近使用eclipse做開發,使用的服務器是tomcat,但在啟動時報了Caused by: java.lang.OutOfMemoryError: PermGen space的異常。 這個錯誤很常見,于是配置tomcat下的catalina.bat,配置e…

org.hibernate.service.ServiceRegistryBuilder被棄用

看視頻教程是這樣寫的: //創建配置對象Configuration config new Configuration().configure();//創建服務注冊對象ServiceRegistry serviceRegistry new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();//創建會話工廠對象session…

音頻基本概念

音頻基本概念 聲音的本質 音調:頻率 音量:振幅 音色:與材質有關,諧波(不規則的正玄波) 屏幕快照 2018-12-04 下午1.53.40.png采樣-量化-編碼 采樣大小: 一個采樣用多少bit存放,目前常…

How to use external classes and PHP files in Laravel Controller?

By: Povilas KoropLaravel is an MVC framework with its own folder structure, but sometimes we want to use something external which doesn’t follow the same structure. Let’s review two different scenarios – when we have external class and when it’s just a…

在多種瀏覽器中嵌入Applet

1 基本信息 摘要:一個開發好的Java Applet,是通過標準的標簽(Tag)嵌入到HTML頁面中的。瀏覽器在解析到支持的嵌入Applet的標簽時,會啟動Java Plug-in來渲染標簽中的Java Applet。 由于歷史原因,在頁面中嵌…

share團隊沖刺3

團隊沖刺第三天 昨天:完成了對輸出文字,按鈕控件的添加,能夠將其在模擬器上運行 今天:學習輸入的添加方式 問題:Android resource linking failed 在改變按鈕樣式的時候,出現了這個問題,正在百度…

Django學習手冊 - ORM 數據創建/表操作 匯總

ORM 查詢的數據類型: QuerySet與惰性機制(可以看作是一個列表) 所謂惰性機制:表名.objects.all()或者.filter()等都只是返回了一個QuerySet(查詢結果集對象),它并不會馬上執行sql,而是當調用QuerySet的時候才執行。 QuerySet特點&…

applet實現大文件ftp上傳(三)

下一步呢&#xff0c;當然就是對這個jar文件進行數字證書包裝。流程如下&#xff1a; <1>、生成密匙證書(key certificate)&#xff0c;該證書將存儲在你的.keystore文件中。Validity指的是密匙的有效期&#xff0c;默認是180&#xff0c;但是這里我們需要一年的時間&am…

網站301重定向 解決方法

網站301重定向&#xff0c;一般都是將不帶www的域名轉向帶有www的&#xff0c;有幾個小朋友問過幾次需要在哪改&#xff0c;寫出來不會的參考下。 1、新建一個“.htaccess”文件 2、復制以下代碼&#xff1a;&#xff08;a你的域名&#xff09; Options FollowSymLinks rewrite…

Vue 從入門到進階之路(十四)

之前的文章我們對 vue 的基礎用法已經有了很直觀的認識&#xff0c;本章我們來看一下 vue 中的生命周期函數。 上圖為 Vue官方為我們提供的完整的生命周期函數的流程圖&#xff0c;下面的案例我們只是走了部分情況流程&#xff0c;但所有的生命周期函數都涉及到了。 1 <!DOC…

css 清除浮動float 嗒嘀嗒滴 ----20181120

手動給父元素添加高度通過clear清除內部和外部浮動給父元素添加overfloat屬性并結合zoom:1使用給父元素添加浮動        常用方法&#xff1a; ①給兄弟元素添加clear屬性&#xff1a;添加一個class為clear&#xff1a;both&#xff0c; ②添加偽類&#xff1a;.clearf…

applet實現大文件ftp上傳(一)

由于要用APPLET實現大文件FTP上傳下載&#xff0c;從網上搜索了幾下&#xff0c;找到很多資料&#xff0c;最后決定采用基于 org.apache.commons.net.ftp包實現FTP上傳下載&#xff0c;Net包中的類既提供對協議的底層訪問也有高層的抽象。在大多數情況下&#xff0c;抽 象是足夠…