學慣用Node.js和Elasticsearch構建搜尋引擎(一)

來源:互聯網
上載者:User

標籤:[]   pre   .com   測試   搭建   art   name   lis   x86_64   

最近的項目要用到快速全文檢索索引,經過前期的調研,最後選用Elasticsearch搭建搜尋伺服器。以前做的項目中沒用過這個搜尋引擎,這是第一次使用。

主要是參照 《如何用 Node.js 和 Elasticsearch 構建搜尋引擎》這篇文章學習的,這篇文章翻譯得很好,整個過程都走下來了很流暢。

下面記錄一下本人按照這篇文章的學習過程:

1、學習Elasticsearch概述。

瞭解Elasticsearch是什嗎?能做什嗎?可以查一下elasticsearch、lucene等的相關介紹,另外也可以查查資料比較一下其它的搜尋引擎sphinx、reds等。

2、學習Elasticsearch術語。

上面參考文章中只列了幾個核心術語,其它更多的術語可以自己尋找資料。

3、安裝Elasticsearch並運行。

a、下載Elasticsearch: https://www.elastic.co/downloads/elasticsearch 

本人下載的v5.3.0版本zip包,下載後解壓到本地mac系統的/usr/local/elasticsearch目錄下.

這個版本需要java1.8以上(包含)支援,這個可以在命令列用java -version查看,達不到要求的就自己升級去。

b、啟動Elasticsearch,出現下面類似的介面就說明啟動成功了。預設9200是http訪問連接埠,是9300是各節點間彼此通訊的連接埠。

>cd /usr/local/elasticsearch>bin/elasticsearch[2017-03-31T16:32:40,477][INFO ][o.e.n.Node               ] [] initializing ...[2017-03-31T16:32:40,571][INFO ][o.e.e.NodeEnvironment    ] [iXZpFuL] using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [57.7gb], net total_space [232.6gb], spins? [unknown], types [hfs][2017-03-31T16:32:40,571][INFO ][o.e.e.NodeEnvironment    ] [iXZpFuL] heap size [1.9gb], compressed ordinary object pointers [true][2017-03-31T16:32:40,590][INFO ][o.e.n.Node               ] node name [iXZpFuL] derived from node ID [iXZpFuL9TUa2_I43LJUQDg]; set [node.name] to override[2017-03-31T16:32:40,590][INFO ][o.e.n.Node               ] version[5.3.0], pid[5772], build[3adb13b/2017-03-23T03:31:50.652Z], OS[Mac OS X/10.12/x86_64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_121/25.121-b13][2017-03-31T16:32:41,642][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [aggs-matrix-stats][2017-03-31T16:32:41,642][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [ingest-common][2017-03-31T16:32:41,642][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [lang-expression][2017-03-31T16:32:41,642][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [lang-groovy][2017-03-31T16:32:41,643][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [lang-mustache][2017-03-31T16:32:41,643][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [lang-painless][2017-03-31T16:32:41,643][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [percolator][2017-03-31T16:32:41,643][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [reindex][2017-03-31T16:32:41,643][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [transport-netty3][2017-03-31T16:32:41,643][INFO ][o.e.p.PluginsService     ] [iXZpFuL] loaded module [transport-netty4][2017-03-31T16:32:41,644][INFO ][o.e.p.PluginsService     ] [iXZpFuL] no plugins loaded[2017-03-31T16:32:43,969][INFO ][o.e.n.Node               ] initialized[2017-03-31T16:32:43,969][INFO ][o.e.n.Node               ] [iXZpFuL] starting ...[2017-03-31T16:32:44,209][INFO ][o.e.t.TransportService   ] [iXZpFuL] publish_address {127.0.0.1:9300}, bound_addresses {[fe80::1]:9300}, {[::1]:9300}, {127.0.0.1:9300}[2017-03-31T16:32:47,392][INFO ][o.e.c.s.ClusterService   ] [iXZpFuL] new_master {iXZpFuL}{iXZpFuL9TUa2_I43LJUQDg}{2FmpVTkEQwKUy9eHEv26qg}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)[2017-03-31T16:32:47,412][INFO ][o.e.h.n.Netty4HttpServerTransport] [iXZpFuL] publish_address {127.0.0.1:9200}, bound_addresses {[fe80::1]:9200}, {[::1]:9200}, {127.0.0.1:9200}[2017-03-31T16:32:47,415][INFO ][o.e.n.Node               ] [iXZpFuL] started[2017-03-31T16:32:47,553][INFO ][o.e.g.GatewayService     ] [iXZpFuL] recovered [1] indices into cluster_state[2017-03-31T16:32:47,806][INFO ][o.e.c.r.a.AllocationService] [iXZpFuL] Cluster health status changed from [RED] to [YELLOW] (reason: [shards started [[library][2]] ...]).

c、在瀏覽器中開啟http://localhost:9200/ ,將會顯示一些關於你啟動並執行執行個體的基本資料。

{  "name" : "iXZpFuL",  "cluster_name" : "elasticsearch",  "cluster_uuid" : "inoWXI3_QsGfG8xG4YHOAA",  "version" : {    "number" : "5.3.0",    "build_hash" : "3adb13b",    "build_date" : "2017-03-23T03:31:50.652Z",    "build_snapshot" : false,    "lucene_version" : "6.4.1"  },  "tagline" : "You Know, for Search"}
 4、圖形化使用者介面。

按照文章中提供的選擇,我安裝了Google瀏覽器的向外延展群組件Elasticsearch Toolbox.介面如下。

第一個select載入可選索引,第二個select載入可選類型。因為還沒有匯入任何資料,暫時沒得選。

其實另外一個外掛程式也挺好,地址:https://github.com/mobz/elasticsearch-head 感興趣的同學可以下載下來試試。

5、基於Node的elasticsearch用戶端。

elasticsearch為Node.js提供一個官方模組,稱為elasticsearch。可以通過這個模組編碼與elasticsearch通訊。

我直接下載的範例程式碼運行。樣本要求node版本0.11.0及以上。

>git clone https://github.com/sitepoint-editors/node-elasticsearch-tutorial.git  #下載樣本>cd node-elasticsearch-tutorial #切換目錄>npm install #安裝依賴

樣本中的檔案解釋可以看到 https://github.com/sitepoint-editors/node-elasticsearch-tutorial 上去看。

我們目前只需要知道:

  1、data.json是測試資料檔案,1000條資料。

  2、index.js檔案的例子就是匯入data.json檔案中的資料到elasticsearch。使用node index.js運行。

$ node index.js1000 items parsed from data fileSuccessfully indexed 1000 out of 1000 items

      3、indices.js用於檢查索引資訊的準確性。

      4、其它的elasticsearch測試檔案都是檢索資料的例子。有各種寫法,以後慢慢研究就可以了。

 

先弄個簡單查詢的在先前安裝的Elasticsearch Toolbox上試試。

由於匯入了資料。現在可以在工具中選擇索引library,類型article.然後直接點擊查詢可以看到如下結果:

上面結果是查詢所有的,我們可以點擊QUERY DEITOR編輯查詢條件,比如查詢作者名為Rowe的資料,條件如下:

{  "query": {    "match": {      "authors.firstname": "Rowe"    }  },  "from": 0,  "size": 10}

可以查到一條記錄。 

關於Elasticsearch資料檢索知識下一篇文章再說。

 

學慣用Node.js和Elasticsearch構建搜尋引擎(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.