ElasticSearch安裝部署

      網友投稿 722 2025-04-05

      搜索


      就是在任何場景下,找尋你想要的信息,這個時候,會輸入一段你要搜索的關鍵字,然后就期望找到這個關鍵字相關的有些信息

      垂直搜索

      站內搜索

      互聯網搜索

      電商網站,招聘網站,新聞網站,各種app

      IT系統的搜索

      OA軟件,辦公自動化軟件,會議管理,日程管理,項目管理,員工管理,搜索“張三”,“張三兒”,“張小三”;有個電商網站,賣家,后臺管理系統,搜索“牙膏”,訂單,“牙膏相關的訂單”

      數據都是存儲在數據庫里面的,比如說電商網站的商品信息,招聘網站的職位信息,新聞網站的新聞信息,如果說從技術的角度去考慮,如何實現如說,電商網站內部的搜索功能的話,就可以考慮,去使用數據庫去進行搜索。

      1、每條記錄的指定字段的文本,可能會很長,比如說“商品描述”字段的長度,有長達數千個,甚至數萬個字符,這個時候,每次都要對每條記錄的所有文本進行掃描,來判斷說,你包不包含我指定的這個關鍵詞(比如說“牙膏”) 2、還不能將搜索詞拆分開來,盡可能去搜索更多的符合你的期望的結果,比如輸入“生化機”,就搜索不出來“生化危機”

      用數據庫來實現搜索,是不太靠譜的。通常來說,性能會很差的。

      Lucene

      Lucene是Apache軟件基金會中一個開放源代碼的全文搜索引擎工具包,是一個全文搜索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。Lucene的目的是為軟件開發人員提供一個簡單易用的工具包,以方便在目標系統中實現全文檢索的功能,或者是以此為基礎建立起完整的全文搜索引擎。

      全文檢索是指計算機索引程序通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置,當用戶查詢時,檢索程序就根據事先建立的索引進行查找,并將查找的結果反饋給用戶的檢索方式。這個過程類似于通過字典中的檢索字表查字的過程。全文搜索搜索引擎數據庫中的數據。

      評分公式

      文檔得分:它是一個刻畫文檔與査詢匹配程度的參數。Apache Lucene的默認評分機制:TF/IDF (詞頻/逆文檔頻率)算法

      當一個文檔經Lucene返回,則意味著該文檔與用戶提交的查詢是匹配的。在這種情況下,每個返回的文檔都有一個得分。得分越高,文檔相關度更高,同一個文檔針對不同查詢的得分是不同的,比較某文檔在不同查詢中的得分是沒有意義的。同一文檔在不同查詢中的得分不具備可比較性,不同查詢返回文檔中的最高得分也不具備可比較性。這是因為文檔得分依賴多個因子,除了權重和查詢本身的結構,還包括匹配的詞項數目,詞項所在字段,以及用于查詢規范化的匹配類型等。在一些比較極端的情況下,同一個文檔在相似查詢中的得分非常懸殊,僅僅是因為使用了自定義得分查詢或者命中詞項數發生了急劇變化。

      文檔權重(document boost):索引期賦予某個文檔的權重值。

      字段權重(field boost):查詢期賦予某個字段的權重值。

      協調因子(coord):基于文檔中詞項命中個數的協調因子,一個文檔命中了查詢中的詞項越多,得分越高。

      逆文檔頻率(inverse document frequency): —個基于詞項的因子,用來告訴評分公式該詞項有多么罕見。逆文檔頻率越低,詞項越罕見。評分公式利用該因子為包含罕見詞項的文檔加權。

      長度范數(length nomi):每個字段的基于詞項個數的歸一化因子(在索引期計算出來并存儲在索引中)。一個字段包含的詞項數越多,該因子的權重越低,這意味著 Apache Lucene評分公式更“喜歡”包含更少詞項的字段。

      詞頻(term frequency): —個基于詞項的因子,用來表示一個詞項在某個文檔中出現了多少次。詞頻越高,文檔得分越高。

      查詢范數(query norm): —個基于查詢的歸一化因子,它等于查詢中詞項的權重平方和。查詢范數使不同查詢的得分能相互比較,盡管這種比較通常是困難且不可行的。

      上面公式糅合了布爾檢索模型和向量空間檢索模型。想了解更多請百度。

      得分公式是一個關于査詢q和文檔d的函數,有兩個因子coord和queryNorm并不直接依賴查詢詞項,而是與查詢詞項的一個求和公式相乘。求和公式中每個加數由以下因子連乘所得:詞頻、逆文檔頻率、詞項權重、范數。范數就是之前提到的長度范數。

      基本規則:

      越多罕見的詞項被匹配上,文檔得分越高。

      文檔字段越短(包含更少的詞項),文檔得分越高。

      權重越高(不論是索引期還是査詢期賦予的權重值),文檔得分越高。

      elasticsearch

      elasticsearch (ES)是一個基于Lucene構建的開源、分布式、RESTful接口全文搜索引擎Elasticsearch還是一個分布式文檔數據庫,其中每個字段均是被索引的數據且可被搜索,它能夠擴展至數以百計的服務器存儲以及處理PB級的數據。它可以在很短的時間內存儲、搜索和分析大量的數據。它通常作為具有復雜搜索場景情況下的核心發動機。Elasticsearch就是為高可用和可擴展而生的。可以通過購置性能更強的服務器來完成,稱為垂直擴展或者向上擴展(Vertical Scale/Scaling Up),或增加更多的服務器來完成,稱為水平擴展或者向外擴展(Horizontal Scale/Scaling Out)盡管ES能夠利用更強勁的硬件,垂直擴展畢竟還是有它的極限。真正的可擴展性來自于水平擴展,通過向集群中添加更多的節點來分擔負載,增加可靠性。在大多數數據庫中,水平擴展通常都需要你對應用進行一次大的重構來利用更多的節點。而ES天生就是分布式的:它知道如何管理多個節點來完成擴展和實現高可用性。這也意味著你的應用不需要做任何的改動。

      評分規則

      是ElasticSearch使用了Lucene的評分功能,但好在我們可以替換默認的評分算法,ElasticSearch使用了Lucene的評分功 能但不僅限于Lucene的評分功能。用戶可以使用各種不同的查詢類型以精確控制文檔評分的計算(custom_boost_factor 查詢、constant_score 査詢、custom_score 查詢等),還可以通過使用腳本(scripting)來改變文檔得分,還可以使用ElasticSearch 0.90中岀現的二次評分功能,通過在返回文檔集之上執行另外一個查詢,重新計算前N個文檔的文檔得分。

      Okapi BM25模型:這是一種基于概率模型的相似度模型,可用于估算文檔與給定査詢匹配的概率。為了在ElasticSearch中使用它,你需要使用該模型的名字,BM25。一般來說,Okapi BM25模型在短文本文檔上的效果最好,因為這種場景中重復詞項對文檔的總體得分損害較大。

      隨機偏離(Divergence from randomness)模型:這是一種基于同名概率模型的相似度模型。為了在ElasticSearch中使用它,你需要使用該模型的名字,DFR。一般來說,隨機偏離模型在類似自然語言的文本上效果較好。

      基于信息的(Information based)模型:這是最后一個新引人的相似度模型,與隨機偏離模型類似。為了在ElasticSearch中使用它,你需要使用該模型的名字,IB。同樣,IB模型也在類似自然語言的文本上擁有較好的效果。

      用途

      分布式實時文件存儲,并將每一個字段都編入索引,使其可以被搜索。

      實時分析的分布式搜索引擎。

      可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。

      應用場景

      維基百科,類似百度百科,牙膏,牙膏的維基百科,全文檢索,高亮,搜索推薦

      Stack Overflow(國外的程序異常討論論壇),IT問題,程序的報錯,提交上去,有人會跟你討論和回答,全文檢索,搜索相關問題和答案,程序報錯了,就會將報錯信息粘貼到里面去,搜索有沒有對應的答案

      GitHub(開源代碼管理),搜索上千億行代碼

      電商網站,檢索商品

      日志數據分析,logstash采集日志,ES進行復雜的數據分析(ELK技術,elasticsearch+logstash+kibana)

      商品價格監控網站,用戶設定某商品的價格閾值,當低于該閾值的時候,發送通知消息給用戶,比如說訂閱牙膏的監控,如果高露潔牙膏的家庭套裝低于50塊錢,就通知我,我就去買

      BI系統,商業智能,Business Intelligence。比如說有個大型商場集團,BI,分析一下某某區域最近3年的用戶消費金額的趨勢以及用戶群體的組成構成,產出相關的數張報表,**區,最近3年,每年消費金額呈現100%的增長,而且用戶群體85%是高級白領,開一個新商場。ES執行數據分析和挖掘,Kibana進行數據可視化

      國內:站內搜索(電商,招聘,門戶,等等),IT系統搜索(OA,CRM,ERP,等等),數據分析(ES熱門的一個使用場景)

      特點

      可以作為一個大型分布式集群(數百臺服務器)技術,處理PB級數據,服務大公司;也可以運行在單機上,服務小公司

      Elasticsearch不是什么新技術,主要是將全文檢索、數據分析以及分布式技術,合并在了一起,才形成了獨一無二的ES;lucene(全文檢索),商用的數據分析軟件(BI),分布式數據庫(mycat)

      對用戶而言,是開箱即用的,非常簡單,作為中小型的應用,直接3分鐘部署一下ES,就可以作為生產環境的系統來使用了,數據量不大,操作不是太復雜

      數據庫的功能面對很多領域是不夠用的(事務,還有各種聯機事務型的操作);特殊的功能,比如全文檢索,同義詞處理,相關度排名,復雜數據分析,海量數據的近實時處理;Elasticsearch作為傳統數據庫的一個補充,提供了數據庫所不不能提供的很多功能

      核心概念

      (1)Near Realtime(NRT):近實時,兩個意思,從寫入數據到數據可以被搜索到有一個小延遲(大概1秒);基于es執行搜索和分析可以達到秒級

      (2)Cluster:集群,包含多個節點,每個節點屬于哪個集群是通過一個配置(集群名稱,默認是elasticsearch)來決定的,對于中小型應用來說,剛開始一個集群就一個節點很正常 (3)Node:節點,集群中的一個節點,節點也有一個名稱(默認是隨機分配的),節點名稱很重要(在執行運維管理操作的時候),默認節點會去加入一個名稱為“elasticsearch”的集群,如果直接啟動一堆節點,那么它們會自動組成一個elasticsearch集群,當然一個節點也可以組成一個elasticsearch集群

      (4)Document&field:文檔,es中的最小數據單元,一個document可以是一條客戶數據,一條商品分類數據,一條訂單數據,通常用JSON數據結構表示,每個index下的type中,都可以去存儲多個document。一個document里面有多個field,每個field就是一個數據字段。

      #product document

      {

      "product_id": "1",

      "product_name": "高露潔牙膏",

      "product_desc": "高效美白",

      "category_id": "2",

      "category_name": "日化用品"

      }

      (5)Index:索引,包含一堆有相似結構的文檔數據,比如可以有一個客戶索引,商品分類索引,訂單索引,索引有一個名稱。一個index包含很多document,一個index就代表了一類類似的或者相同的document。比如說建立一個product index,商品索引,里面可能就存放了所有的商品數據,所有的商品document。 (6)Type:類型,每個索引里都可以有一個或多個type,type是index中的一個邏輯數據分類,一個type下的document,都有相同的field,比如博客系統,有一個索引,可以定義用戶數據type,博客數據type,評論數據type。

      商品index,里面存放了所有的商品數據,商品document

      但是商品分很多種類,每個種類的document的field可能不太一樣,比如說電器商品,可能還包含一些諸如售后時間范圍這樣的特殊field;生鮮商品,還包含一些諸如生鮮保質期之類的特殊field

      type,日化商品type,電器商品type,生鮮商品type

      日化商品type:product_id,product_name,product_desc,category_id,category_name 電器商品type:product_id,product_name,product_desc,category_id,category_name,service_period 生鮮商品type:product_id,product_name,product_desc,category_id,category_name,eat_period

      ElasticSearch安裝于部署

      #每一個type里面,都會包含一堆document

      {

      "product_id": "2",

      "product_name": "長虹電視機",

      "product_desc": "4k高清",

      "category_id": "3",

      "category_name": "電器",

      "service_period": "1年"

      }

      {

      "product_id": "3",

      "product_name": "基圍蝦",

      "product_desc": "純天然,冰島產",

      "category_id": "4",

      "category_name": "生鮮",

      "eat_period": "7天"

      }

      (7)shard:單臺機器無法存儲大量數據,es可以將一個索引中的數據切分為多個shard,分布在多臺服務器上存儲。有了shard就可以橫向擴展,存儲更多數據,讓搜索和分析等操作分布到多臺服務器上去執行,提升吞吐量和性能。每個shard都是一個lucene index。 (8)replica:任何一個服務器隨時可能故障或宕機,此時shard可能就會丟失,因此可以為每個shard創建多個replica副本。replica可以在shard故障時提供備用服務,保證數據不丟失,多個replica還可以提升搜索操作的吞吐量和性能。primary shard(建立索引時一次設置,不能修改,默認5個),replica shard(隨時修改數量,默認1個),默認每個索引10個shard,5個primary shard,5個replica shard,最小的高可用配置,是2臺服務器。

      對比

      ES安裝

      Elasticsearch官網: https://www.elastic.co/products/elasticsearch

      1)解壓elasticsearch-5.2.2.tar.gz到/opt/module目錄下

      tar -zxvf elasticsearch-5.2.2.tar.gz -C /opt/module/

      2)在/opt/module/elasticsearch-5.2.2路徑下創建data和logs文件夾

      mkdir data

      mkdir logs

      3)修改配置文件/opt/module/elasticsearch-5.2.2/config/elasticsearch.yml

      # ---------------------------------- Cluster -----------------------------------

      cluster.name: my-application

      # ------------------------------------ Node ------------------------------------

      node.name: node-102

      # ----------------------------------- Paths ------------------------------------

      path.data: /opt/module/elasticsearch-5.2.2/data

      path.logs: /opt/module/elasticsearch-5.2.2/logs

      # ----------------------------------- Memory -----------------------------------

      bootstrap.memory_lock: false

      bootstrap.system_call_filter: false

      # ---------------------------------- Network -----------------------------------

      network.host: 192.168.1.11 ? #自己ip

      # --------------------------------- Discovery ----------------------------------

      discovery.zen.ping.unicast.hosts: ["elasticsearch"] #自己主機名

      #注意

      (1)cluster.name如果要配置集群需要兩個節點上的elasticsearch配置的cluster.name相同,都啟動可以自動組成集群,這里如果不改cluster.name則默認是cluster.name=my-application,

      (2)nodename隨意取但是集群內的各節點不能相同

      (3)修改后的每行前面不能有空格,修改后的“:”后面必須有一個空格

      4)配置Linux系統

      切換到root用戶,

      #編輯/etc/security/limits.conf添加類似如下內容

      * soft nofile 65536

      * hard nofile 131072

      * soft nproc 2048

      * hard nproc 4096

      #編輯 /etc/security/limits.d/90-nproc.conf

      * soft nproc 1024

      #修改為

      * soft nproc 4096

      #編輯 vi /etc/sysctl.conf

      vm.max_map_count=655360

      fs.file-max=655360

      sysctl -p

      重新啟動elasticsearch,即可啟動成功。

      #測試集群

      curl http://elasticsearch:9200

      {

      "name" : "node-1",

      "cluster_name" : "my-application",

      "cluster_uuid" : "mdLmu1rOS7qPNfToNOXzKA",

      "version" : {

      "number" : "5.2.2",

      "build_hash" : "f9d9b74",

      "build_date" : "2017-02-24T17:26:45.835Z",

      "build_snapshot" : false,

      "lucene_version" : "6.4.1"

      },

      "tagline" : "You Know, for Search"

      }

      插件安裝

      下載插件

      https://github.com/mobz/elasticsearch-head ? ? ? ? ? ? ? ? ?elasticsearch-head-master.zip

      https://nodejs.org/dist/ ? ? ? ? ? ?node-v6.9.2-linux-x64.tar.xz

      安裝環境

      tar -zxvf node-v6.9.2-linux-x64.tar.gz -C ? ? /opt/module/

      vi /etc/profile

      export NODE_HOME=/opt/module/node-v6.9.2-linux-x64

      export PATH=$PATH:$NODE_HOME/bin

      source /etc/profile

      node和npm

      node -v

      v6.9.2

      npm -v

      3.10.9

      插件配置

      unzip elasticsearch-head-master.zip -d /opt/module/

      換源

      npm config set registry https://registry.npm.taobao.org

      npm config list / npm config get registery ?#檢查是否替換成功

      安裝插件

      npm install -g cnpm --registry=https://registry.npm.taobao.org

      安裝grunt:

      npm install -g grunt-cli

      編輯Gruntfile.js

      #文件93行添加hostname:'0.0.0.0'

      options: {

      hostname:'0.0.0.0',

      port: 9100,

      base: '.',

      keepalive: true

      }

      檢查

      #檢查head根目錄下是否存在base文件夾

      #沒有:將 _site下的base文件夾及其內容復制到head根目錄下

      mkdir base

      cp base/* ../base/

      啟動grunt server:

      grunt server -d

      #如果提示grunt的模塊沒有安裝:

      Local Npm module “grunt-contrib-clean” not found. Is it installed?

      Local Npm module “grunt-contrib-concat” not found. Is it installed?

      Local Npm module “grunt-contrib-watch” not found. Is it installed?

      Local Npm module “grunt-contrib-connect” not found. Is it installed?

      Local Npm module “grunt-contrib-copy” not found. Is it installed?

      Local Npm module “grunt-contrib-jasmine” not found. Is it installed?

      Warning: Task “connect:server” not found. Use –force to continue.

      #執行以下命令:

      npm install grunt-contrib-clean -registry=https://registry.npm.taobao.org

      npm install grunt-contrib-concat -registry=https://registry.npm.taobao.org

      npm install grunt-contrib-watch -registry=https://registry.npm.taobao.org

      npm install grunt-contrib-connect -registry=https://registry.npm.taobao.org

      npm install grunt-contrib-copy -registry=https://registry.npm.taobao.org

      npm install grunt-contrib-jasmine -registry=https://registry.npm.taobao.org

      #最后一個模塊可能安裝不成功,但是不影響使用。

      Web訪問

      集群無法訪問

      在/opt/module/elasticsearch-5.2.2/config路徑下修改配置文件elasticsearch.yml,在文件末尾增加

      http.cors.enabled: true

      http.cors.allow-origin: "*"

      #重啟ElasticSearch

      #重啟插件

      云搜索服務 CSS Elasticsearch

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:介紹有關word表格跨頁的具體方法(word表格如何跨頁)
      下一篇:Alt+Enter怎么沒有(alt+enter在哪)
      相關文章
      亚洲AV无码一区二区三区国产| 亚洲av无码日韩av无码网站冲| 免费观看亚洲人成网站| 亚洲一区二区三区91| 久久久久亚洲AV成人片| 亚洲Av无码精品色午夜| 国产精品亚洲а∨无码播放| 亚洲精品成人网站在线观看| 亚洲日本乱码在线观看| 美腿丝袜亚洲综合| 综合亚洲伊人午夜网 | 亚洲av永久无码精品网站| 国产亚洲精品成人AA片新蒲金| 亚洲无码高清在线观看| 亚洲无码视频在线| 国产亚洲人成A在线V网站| 国产国拍亚洲精品福利| 中文字幕亚洲电影| 亚洲男同帅GAY片在线观看| 亚洲欧洲无码AV电影在线观看| 亚洲精品成人片在线观看精品字幕| 亚洲女初尝黑人巨高清| 亚洲Av无码精品色午夜| 亚洲黄色免费电影| 亚洲国产成人久久77| 亚洲av乱码一区二区三区香蕉| 在线aⅴ亚洲中文字幕| 亚洲αⅴ无码乱码在线观看性色| 国产亚洲精品AAAA片APP| 亚洲成人一区二区| 中文字幕精品亚洲无线码一区应用| 亚洲愉拍99热成人精品热久久| 国产AV无码专区亚洲A∨毛片| 久久久久久久久亚洲| 亚洲资源在线视频| 亚洲中文字幕日本无线码| 日韩国产欧美亚洲v片| 亚洲人成色7777在线观看不卡| 国产亚洲精品资在线| 亚洲av日韩av无码黑人| 亚洲欧洲自拍拍偷午夜色|