安裝Oracle JDK
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
因?yàn)?code>ElasticSearch底層其實(shí)就是lucene
,所以界弧,需要java
如果以上第一行命令出現(xiàn)
command not found
场刑,采取下面的解決方案证芭,有兩個需要注意的地方:
sudo apt-get install python-software-properties
sudo apt-get install software-properties-common
注:如果你想安裝OpenJDK,請用以下命令盖文,不過這個我并沒有親自測試過。
sudo apt-get update
sudo apt-get install openjdk-8-jre-headless -y
下載并安裝ElasticSearch
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.7.0.deb
sudo dpkg -i elasticsearch-1.7.0.deb
目前ElasticSearch
的最新穩(wěn)定版為1.7.0
患久,如果之后版本有升級椅寺,請將相應(yīng)的版本號替換掉上面的1.7.0
。
你可以到這里查看:
https://www.elastic.co/downloads/elasticsearch
安裝之:
sudo dpkg -i elasticsearch-1.7.0.deb
開機(jī)自啟動蒋失,
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"
}
這樣其實(shí)你已經(jīng)將ElasticSearch
安裝成功了返帕。
為Laravel項目安裝相應(yīng)的ElasticSearch composer package
當(dāng)然,這些package
有幾個都很不錯篙挽,而我個人使用的是Bouncy在composer.json里添加該package
信息
"require": {
"fadion/bouncy": "dev-l5"
}
然后執(zhí)行荆萤,composer update
添加 Service provider
來到config/app.php
,在providers
處添加:
'Fadion\Bouncy\BouncyServiceProvider',
最后執(zhí)行:
php artisan vendor:publish
這樣之后铣卡,你在config/
目錄就會得到兩個個配置文件
config/bouncy.php
config/elasticsearch.php
第一個是關(guān)于Bouncypackage的簡單配置链韭,第二個是關(guān)于ElasticSearch
的具體配置,你可以直接打開來看看煮落,如果沒有什么必要敞峭,你可以目前保持文件不變。
安裝完之后蝉仇,我們怎么使用呢旋讹?其實(shí)很簡單,Bouncy提供一種非常簡單的方式將Laravel的Eloquent Model
與ElasticSearch
關(guān)聯(lián)起來--就只是使用一個trait
而已轿衔!比如沉迹,我需要用Article Model
作為示例:
use Fadion\Bouncy\BouncyTrait;
class Article extends Eloquent {
use BouncyTrait;
// ...other Eloquent attributes
// or methods.
}
沒錯,這樣就可以了害驹。
索引所有的文章
這里我們在ArticleController
實(shí)現(xiàn)索引所有的文章:
public function indexAllArticle()
{
return Article::all()->index();
}
嗯鞭呕,就是這么簡單的,就像正常使用Eloquent
一樣宛官,不過是在后面多使用一個index()
方法葫松。
在這里的使用請確保你的ElasticSearch
服務(wù)是在正常運(yùn)行期間瓦糕。
而且還有一個好處就是,Bouncy在你開啟auto_index
的情況下进宝,會自動在你創(chuàng)建和保存文件的時候自動將文章索引了刻坊,至于更多詳細(xì)的用法,你可以查看詳細(xì)的文檔党晋。
開啟搜索
<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文
件中創(chuàng)建一個搜索表單谭胚,并指定表單的提交方式為GET
。
設(shè)置路由
Route::get('/search','ArticleController@search');
編寫search()方法
由于我們是直接使用GET
的方式來傳遞參數(shù)未玻,所以這里的示例僅是一些簡單的代碼:
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
進(jìn)行匹配灾而,你也可以將content
作為匹配域。而highlight
選項的配置是為了在視圖中高亮匹配的內(nèi)容:
{!! $article->highlight('title') !!}
這樣扳剿,一個完整的搭建ElasticSearch
的過程就完成了藏鹊。