原文來自:https://jellybool.com/post/setup-slasticsearch-on-your-websitephp
在個人博客按Shift+S
就能夠呼出搜索框,能夠直接體驗一下現實的Demojava
ElasticSearch
憑藉強大的API和不俗的搜索性能,目前在搜索引擎領域的勢頭貌似愈來愈猛了,處於興趣緣由,本身就花了點時間將本身的博客搜索插上了ElasticSearch
的翅膀。python
sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer
由於ElasticSearch
底層其實就是lucene
,因此,須要java
git
若是以上第一行命令出現
command not found
,採起下面的解決方案,有兩個須要注意的地方:github
sudo apt-get install python-software-properties sudo apt-get install software-properties-common
注:若是你想安裝OpenJDK,請用如下命令,不過這個我並無親自測試過。web
sudo apt-get update sudo apt-get install openjdk-8-jre-headless -y
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.7.0.deb sudo dpkg -i elasticsearch-1.7.0.deb
目前ElasticSearch
的最新穩定版爲1.7.0
,若是以後版本有升級,請將相應的版本號替換掉上面的1.7.0
。json
你能夠到這裏查看:oracle
https://www.elastic.co/downloads/elasticsearchapp
安裝之:composer
sudo dpkg -i elasticsearch-1.7.0.deb
sudo update-rc.d elasticsearch defaults 95 10 sudo /etc/init.d/elasticsearch start
curl http://localhost:9200
你將看到相似如下的信息:
{ "status" : 200, "version" : { "number" : "1.7.0", "build_timestamp" : "2015-07-16T14:31:07Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }
這樣其實你已經將ElasticSearch
安裝成功了。
固然,這些package
有幾個都很不錯,而我我的使用的是Bouncy在composer.json裏添加該package
信息
"require": { "fadion/bouncy": "dev-l5" }
而後執行,composer update
添加 Service provider
來到config/app.php
,在providers
處添加:
'Fadion\Bouncy\BouncyServiceProvider',
最後執行:
php artisan vendor:publish
這樣以後,你在config/
目錄就會獲得兩個個配置文件
config/bouncy.php config/elasticsearch.php
第一個是關於Bouncypackage的簡單配置,第二個是關於ElasticSearch
的具體配置,你能夠直接打開來看看,若是沒有什麼必要,你能夠目前保持文件不變。
安裝完以後,咱們怎麼使用呢?其實很簡單,Bouncy提供一種很是簡單的方式將Laravel的Eloquent Model
與ElasticSearch
關聯起來--就只是使用一個trait
而已!好比,我須要用Article Model
做爲示例:
use Fadion\Bouncy\BouncyTrait; class Article extends Eloquent { use BouncyTrait; // ...other Eloquent attributes // or methods. }
沒錯,這樣就能夠了。
這裏咱們在ArticleController
實現索引全部的文章:
public function indexAllArticle() { return Article::all()->index(); }
嗯,就是這麼簡單的,就像正常使用Eloquent
同樣,不過是在後面多使用一個index()
方法。
在這裏的使用請確保你的ElasticSearch
服務是在正常運行期間。
並且還有一個好處就是,Bouncy在你開啓auto_index
的狀況下,會自動在你建立和保存文件的時候自動將文章索引了,至於更多詳細的用法,你能夠查看詳細的文檔。
<h1>Type something to search...</h1> {!! Form::open(['url'=>'/search','method'=>'get']) !!} <div class="form-group"> <input class="form-control" autofocus="true" name="query" id="query" type="text"/> </div> {!! Form::close() !!}
咱們在blade文
件中建立一個搜索表單,並指定表單的提交方式爲GET
。
Route::get('/search','ArticleController@search');
因爲咱們是直接使用GET
的方式來傳遞參數,因此這裏的示例僅是一些簡單的代碼:
public function search() { if ( isset($_GET['query']) && !empty($_GET['query']) ) { $query = $_GET['query']; } $params = [ 'query' => [ 'match' => [ 'title' => $query ] ], 'highlight' => [ 'fields' => [ 'title' => new \stdClass ] ], 'size' => 20 ]; $articles = Article::search($params); return view('article.search', compact('articles')); }
在這裏咱們只是指定了對文章的title
進行匹配,你也能夠將content
做爲匹配域。而highlight
選項的配置是爲了在視圖中高亮匹配的內容:
{!! $article->highlight('title') !!}
這樣,一個完整的搭建ElasticSearch
的過程就完成了。
在實現的過程當中,貌似ElasticSearch對中文的支持不是那麼好,因此接下來會嘗試使用一下中文分詞器來看看效果,順利的話會再出一篇文章。
Happy Hacking