026 Elastic----全文檢索技術01---概述及windows安裝

用戶訪問咱們的首頁,通常都會直接搜索來尋找本身想要購買的商品。
而商品的數量很是多,並且分類繁雜。如何能正確的顯示出用戶想要的商品,並進行合理的過濾,儘快促成交易,是搜索系統要研究的核心。
面對這樣複雜的搜索業務和數據量,使用傳統數據庫搜索就顯得力不從心,通常咱們都會使用全文檢索技術,好比以前你們學習過的Solr。
不過今天,咱們要講的是另外一個全文檢索技術:Elasticsearch。html

1.簡介前端

Elastic官網:https://www.elastic.co/cn/node

Elastic有一條完整的產品線及解決方案:Elasticsearch、Kibana、Logstash等,前面說的三個就是你們常說的ELK技術棧。 git

 

1.1 Elasticsearch的概念和特色github

網址:https://www.elastic.co/cn/products/elasticsearch算法

 

Elasticsearch和MongoDB/Redis/Memcache同樣,是非關係型數據庫。是一個接近實時的搜索平臺,從索引這個文檔到這個文檔可以被搜索到只有一個輕微的延遲,企業應用定位:採用Restful API標準的可擴展和高可用的實時數據分析的全文搜索工具
可拓展:支持一主多從且擴容簡易,只要cluster.name一致且在同一個網絡中就能自動加入當前集羣;自己就是開源軟件,也支持不少開源的第三方插件。
高可用:在一個集羣的多個節點中進行分佈式存儲,索引支持shards和複製,即便部分節點down掉,也能自動進行數據恢復和主從切換。
採用RestfulAPI標準:經過http接口使用JSON格式進行操做數據。sql

數據存儲的最小單位是文檔,本質上是一個JSON 文本:docker

 

如上所述,Elasticsearch具有如下特色:數據庫

  • 分佈式,無需人工搭建集羣(solr就須要人爲配置,使用Zookeeper做爲註冊中心)npm

  • Restful風格,一切API都遵循Rest原則,容易上手

  • 近實時搜索,數據更新在Elasticsearch中幾乎是徹底同步的。

 

1.2 爲什麼使用elasticSearch

實際項目開發中,幾乎每一個系統都會有一個搜索的功能,數據量少時能夠直接從主數據庫中好比Mysql搜索,但當搜索作到必定程度時,好比系統數據量上了10億、100億條的時候,傳統的關係型數據庫的I/O性能和統計分析性能就難以知足用戶須要了。因此不少公司都會把搜索單獨作成一個獨立的模塊,用ElasticSearch等來實現。雖然內存緩存數據庫的讀寫性能很高,但徹底把數據放在內存中是不太現實的,好比到PB級別的數據,按照每一個節點96G內存計算,在內存徹底裝滿的數據狀況下,須要的機器是:1PB=1024T=1048576G ,節點數就是1048576/96=10922個 ,再考慮到數據備份,節點數還須要翻倍,成本巨大決定了其不現實。
1.3 市場現狀

2013年初,GitHub拋棄了Solr,採起ElasticSearch來作PB級的搜索,包括13億文件和1300億行代碼」。
百度目前普遍使用ElasticSearch做爲文本數據分析,採集百度全部服務器上的各種指標數據及用戶自定義數據,經過對各類數據進行多維分析展現,輔助定位分析實例異常或業務層面異常。目前覆蓋百度內部20多個業務線(包括casio、雲分析、網盟、預測、文庫、直達號、錢包、風控等),單集羣最大100臺機器,200個ES節點,天天導入30TB+數據。

1.4 索引結構

下圖是ElasticSearch的索引結構,下邊黑色部分是物理結構,上邊黃色部分是邏輯結構,邏輯結構也是爲了更好的去描述ElasticSearch的工做原理及去使用物理結構中的索引文件。

邏輯結構部分是一個倒排索引表(根據詞找文章)
一、將要搜索的文檔內容分詞,全部不重複的詞組成分詞列表。
二、將搜索的文檔最終以Document方式存儲起來。
三、每一個詞和docment都有關聯。

注意:正排索引(從文章中找詞)

如今,若是咱們想搜索 quick brown ,咱們只須要查找包含每一個詞條的文檔:

兩個文檔都匹配,可是第一個文檔比第二個匹配度更高。若是咱們使用僅計算匹配詞條數量的簡單類似性算法 ,那麼,咱們能夠說,對於咱們查詢的相關性來說,第一個文檔比第二個文檔更佳。

1.5 RESTful應用方法

Elasticsearch提供 RESTful Api接口進行索引、搜索,而且支持多種客戶端。

下圖是es在項目中的應用方式:

1)用戶在前端搜索關鍵字
2)項目前端經過http方式請求項目服務端
3)項目服務端經過Http RESTful方式請求ES集羣進行搜索
4)ES集羣從索引庫檢索數據。

2.ElasticSearch安裝與配置

(1)安裝配置:

  • 新版本要求至少jdk1.8以上。
  • 支持tar、zip、rpm等多種安裝方式。在windows下開發建議使用ZIP安裝方式。
  • 支持docker方式安裝

下載ES: Elasticsearch 6.2.1,解壓 elasticsearch-6.2.1.zip

注意:當解壓完成後,文件目錄中是沒有data文件夾的,咱們應該本身手動添加

bin:腳本目錄,包括:啓動、中止等可執行腳本
config:配置文件目錄
data:索引目錄,存放索引文件的地方
logs:日誌目錄
modules:模塊目錄,包括了es的功能模塊
plugins :插件目錄,es支持插件機制

(2)配置文件

<1>3個配置文件

ES的配置文件的地址根據安裝形式的不一樣而不一樣:
使用zip、tar安裝,配置文件的地址在安裝目錄的config下。
使用RPM安裝,配置文件在/etc/elasticsearch下。
使用MSI安裝,配置文件的地址在安裝目錄的config下,而且會自動將config目錄地址寫入環境變量ES_PATH_CONF。

本教程使用的zip包安裝,配置文件在ES安裝目錄的config下。

配置文件以下:

elasticsearch.yml : 用於配置Elasticsearch運行參數
jvm.options : 用於配置Elasticsearch JVM設置
log4j2.properties: 用於配置Elasticsearch日誌

elasticsearch.yml 配置實例:

cluster.name: leyou
node.name: ly_node_1
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]
discovery.zen.minimum_master_nodes: 1
node.ingest: true
bootstrap.memory_lock: false
node.max_local_storage_nodes: 2

path.data: E:\toolsoftware\elasticsearch-6.2.1\data
path.logs: E:\toolsoftware\elasticsearch-6.2.1\logs

http.cors.enabled: true
http.cors.allow-origin: /.*/

注意:根據實際安裝目錄,修改path.data和path.logs路徑配置

經常使用的配置項以下:

  • cluster.name:配置elasticsearch的集羣名稱,默認是elasticsearch。建議修改爲一個有意義的名稱。
  • node.name:節點名,一般一臺物理服務器就是一個節點,es會默認隨機指定一個名字,建議指定一個有意義的名稱,方便管理一個或多個節點組成一個cluster集羣,集羣是一個邏輯的概念,節點是物理概念,後邊章節會詳細介紹。
  • path.conf: 設置配置文件的存儲路徑,tar或zip包安裝默認在es根目錄下的config文件夾,rpm安裝默認在/etc/
  • elasticsearch path.data: 設置索引數據的存儲路徑,默認是es根目錄下的data文件夾,能夠設置多個存儲路徑,用逗號隔開。 path.logs: 設置日誌文件的存儲路徑,默認是es根目錄下的logs文件夾 path.plugins: 設置插件的存放路徑,默認是es根目錄下的plugins文件夾
  • bootstrap.memory_lock: true 設置爲true能夠鎖住ES使用的內存,避免內存與swap分區交換數據。
  • network.host: 設置綁定主機的ip地址,設置爲0.0.0.0表示綁定任何ip,容許外網訪問,生產環境建議設置爲具體的ip。 http.port: 9200 設置對外服務的http端口,默認爲9200。
  • transport.tcp.port: 9300 集羣結點之間通訊端口
  • node.master: 指定該節點是否有資格被選舉成爲master結點,默認是true,若是原來的master宕機會從新選舉新的master。 node.data: 指定該節點是否存儲索引數據,默認爲true。
  • discovery.zen.ping.unicast.hosts: ["host1:port", "host2:port", "..."] 設置集羣中master節點的初始列表。
  • discovery.zen.ping.timeout: 3s 設置ES自動發現節點鏈接超時的時間,默認爲3秒,若是網絡延遲高可設置大些。
  • discovery.zen.minimum_master_nodes:主結點數量的最少值 ,此值的公式爲:(master_eligible_nodes / 2) + 1 ,好比:有3個符合要求的主結點,那麼這裏要設置爲2。
  • node.max_local_storage_nodes:單機容許的最大存儲結點數,一般單機啓動一個結點建議設置爲1,開發環境若是單機啓動多個節點可設置大於1.

 (3)啓動ElasticSearch

進入bin目錄,在cmd下運行:elasticsearch.bat

能夠打開bin目錄,雙擊elasticSearch.bat文件,啓動ElasticSearch

 

啓動完成後,訪問http://localhost:9200/

可見以下內容:

(4)head插件安裝

head插件是ES的一個可視化管理插件,用來監視ES的狀態,並經過head客戶端和ES服務進行交互,好比建立映
射、建立索引等,head的項目地址在https://github.com/mobz/elasticsearch-head 。
從ES6.0開始,head插件支持使得node.js運行

安裝步驟:

  • 安裝node.js(本機已安裝,若沒安裝,請參考https://www.cnblogs.com/luckyplj/p/11471067.html)
  • 解壓所提供的head(此壓縮包已經安裝了node_modules,即head插件所依賴的包),只要cmd,進入相應的目錄,運行npm run start,注意:若從官方下載的head包默認是沒有node_modules文件夾的,須要先執行npm install,在執行npm run start

此時,訪問http://localhost:9100/

注意:若出現問題首先考慮

打開瀏覽器調試工具發現報錯:
Origin null is not allowed by Access-Control-Allow-Origin.
緣由是:head插件做爲客戶端要鏈接ES服務(localhost:9200),此時存在跨域問題,elasticsearch默認不容許跨
域訪問。
解決方案:
設置elasticsearch容許跨域訪問
在config/elasticsearch.yml 後面增長如下參數:
#開啓cors跨域訪問支持,默認爲false http.cors.enabled: true #跨域訪問容許的域名地址,(容許全部域名)以上使
用正則 http.cors.allow-origin: /.*/
注意:將config/elasticsearch.yml另存爲utf-8編碼格式。

 

elasticsearch原理介紹:https://www.cnblogs.com/dreamroute/p/8484457.html

Elasticsearch數據庫:https://blog.csdn.net/aisemi/article/details/80212836(首先查看,最有價值)

大白話ElasticSearch是什麼以及應用場景:https://blog.csdn.net/paicmis/article/details/82535018(次推薦瀏覽)

ElasticSearch從入門到精通,史上最全:https://blog.csdn.net/JENREY/article/details/81290535

相關文章
相關標籤/搜索