為你的站點(diǎn)插上 ElasticSearch 的翅膀

安裝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 ModelElasticSearch關(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的過程就完成了藏鹊。


原文:https://segmentfault.com/a/1190000003010186

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踱蠢,一起剝皮案震驚了整個濱河市障本,隨后出現(xiàn)的幾起案子员凝,更是在濱河造成了極大的恐慌,老刑警劉巖瞧掺,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕餐,死亡現(xiàn)場離奇詭異,居然都是意外死亡辟狈,警方通過查閱死者的電腦和手機(jī)肠缔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哼转,“玉大人明未,你說我怎么就攤上這事∫悸” “怎么了趟妥?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長佣蓉。 經(jīng)常有香客問我披摄,道長,這世上最難降的妖魔是什么偏螺? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮匆光,結(jié)果婚禮上套像,老公的妹妹穿的比我還像新娘。我一直安慰自己终息,他們只是感情好夺巩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布贞让。 她就那樣靜靜地躺著,像睡著了一般柳譬。 火紅的嫁衣襯著肌膚如雪喳张。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天美澳,我揣著相機(jī)與錄音销部,去河邊找鬼。 笑死制跟,一個胖子當(dāng)著我的面吹牛舅桩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雨膨,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼擂涛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了聊记?” 一聲冷哼從身側(cè)響起撒妈,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎排监,沒想到半個月后狰右,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡社露,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年挟阻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峭弟。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡附鸽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞒瘸,到底是詐尸還是另有隱情坷备,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布情臭,位于F島的核電站省撑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俯在。R本人自食惡果不足惜竟秫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跷乐。 院中可真熱鬧肥败,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纽谒,卻和暖如春证膨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鼓黔。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工央勒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人请祖。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓订歪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肆捕。 傳聞我的和親對象是個殘疾皇子刷晋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接 必備品 文檔:Documentation API:API Reference 視頻:Laracasts ...
    layjoy閱讀 8,607評論 0 121
  • 必備品文檔:DocumentationAPI: API Reference視頻:Laracasts速查表:Lara...
    ethanzhang閱讀 5,746評論 0 68
  • Composer Repositories Composer源 Firegento - Magento模塊Comp...
    零一間閱讀 3,960評論 1 66
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)慎陵,斷路器眼虱,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,838評論 6 342