1、下載安裝
elasticsearch 啟動時候回占用大量內存(2G左右),啟動成功后,內存會慢慢釋放掉一些
windows
下載地址:https://www.elastic.co/cn/downloads/elasticsearch
進入elasticsearch的bin目錄,雙擊elasticsearch.bat啟動服務,默認端口是9200
如果啟動不了:config/elasticsearch.yml 中添加 xpack.ml.enabled: false
linux:可以直接使用docker部署
閱讀文檔:
https://es.xiaoleilu.com/index.html
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/modules-scripting-painless.html
配置
1、elasticsearch.yml,注意設置elasticsearch.yml是UTF-8的字符編碼)
#ES可以配置集群,這個就是集群的名稱(一個集群通用這個名字) cluster.name: xuecheng #設置當前的服務在集群中的節點名稱(不能重復) node.name: xc_node_1 #設置綁定主機的ip地址,設置為0.0.0.0表示綁定任何ip,允許外網訪問,生產環境建議設置為具體 的ip network.host: 0.0.0.0 #服務端口(使用http訪問) http.port: 9200 #ES集群內部之間相互訪問的接口 transport.tcp.port: 9300 #指定該節點是否有資格被選舉成為master結點,默認是true,如果原來的master宕機會重新選舉新 的master node.master: true #指定該節點是否存儲索引數據,默認為true。 node.data: true #配置集群 discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"] #設置ES自動發現節點連接超時的時間,默認為3秒,如果網絡延遲高可設置大些。 discovery.zen.ping_timeout: 3s #主結點數量的最少值 ,此值的公式為:(master_eligible_nodes / 2) + 1 ,比如:有3個符合要求的主結點,那么這 里要設置為2。 discovery.zen.minimum_master_nodes: 1 #是否允許成為協調節點 node.ingest: true #設置為true可以鎖住ES使用的內存,避免內存與swap分區交換數據。 bootstrap.memory_lock: false #單機允許的最大存儲結點數,通常單機啟動一個結點建議設置為1,開發環境如果單機啟動多個節點可設置大於1. node.max_local_storage_nodes: 2 path.data: D:\ElasticSearch\elasticsearch-6.2.1-1\data path.logs: D:\ElasticSearch\elasticsearch-6.2.1-1\logs #開啟cors跨域訪問支持 http.cors.enabled: true #(允許所有域名)以上,使用正則 http.cors.allow-origin: /.*/
更多時間
discovery.zen.ping_timeout discovery.zen.fd.ping_timeout discovery.zen.join_timeout discovery.zen.publish_timeout discovery.zen.commit_timeout
2、jvm.options
設置最小及最大的JVM堆內存大小:在jvm.options中設置 -Xms和-Xmx: 1) 兩個值設置為相等 2) 將 Xmx 設置為不超過物理內存的一半。 默認是1g
3、log4j2.properties
生產環境,注意最好配置error
4、在linux上根據系統資源情況,可將每個進程最多允許打開的文件數設置大些。
elasticsearch ‐ nofile 65536
啟動報錯
其他錯誤參考:https://blog.csdn.net/qq_34409255/article/details/84974280
當在配置文件配置了 network.host: 0.0.0.0,報錯:JVM is using the client VM [Java HotSpot(TM) Client VM] but should be using a server VM for the best performance
解決修改java運行環境 D:\java\jdk1.8.0_201\jre\lib\i386\jvm.cfg
概念
了解參考:https://www.cnblogs.com/jajian/p/9801154.html
對Elastcisearch描述
- 分布式的實時文件存儲,每個字段都被索引並可被搜索
- 分布式的實時分析搜索引擎
- 可以擴展到上百台服務器,處理PB級結構化或非結構化數據
ElasticSearch 的實現原理主要分為以下幾個步驟,首先用戶將數據提交到Elastic Search 數據庫中,再通過分詞控制器去將對應的語句分詞,將其權重和分詞結果一並存入數據,當用戶搜索數據時候,再根據權重將結果排名,打分,再將返回結果呈現給用戶。底層基於Lucene。
Elasticsearch是與名為Logstash的數據收集和日志解析引擎以及名為Kibana的分析和可視化平台一起開發的。這三個產品被設計成一個集成解決方案,稱為“Elastic Stack”(以前稱為“ELK stack”)。
面向文檔的,使用json作為文檔序列化格式。
全文檢索、倒排索引(示意圖)
倒排索引就是講數據中的詞拆分構建一個大表,將關鍵字拆出來,后面帶上這個文章的documentid號,通過關鍵詞可以找到對應的文章
全文檢索就比較好理解的,就是當我們輸入“全瓦解”,會被拆分成”全”,“瓦解”2個此,用2個詞去倒排索引里面去檢索數據,檢索到的數據返回。整個過程就叫做全文檢索
lucene
lucene.就是一個jar包,里面包含(封裝好的各種建立倒排索引,以及進行搜索的代碼,包含各種算法、我們用java開發的時候,引人lucene jar,然后基於lucene的api開發即可,用lucene,我們就可以去將已有的數據建立索引,lucene會在本地磁盤上面,給我們組織索引的數據結構。另外的話,我們也可以用lucene提供的一些功能和api來針對磁盤上的索引數據,進行搜索。
Elasticsearch
1.自動維護數據的分布到多個節點索引的建立,還有搜索請術分布到多個節點的執行
2.自動維護數據的冗余副本,包證說,一些機器宕機了,不會丟失任何的數據
3.封裝了更多的高級功能,以給我們提供更多高級的支持,讓我們快速的開發應用,開發更加復雜的應用,復雜的搜索功能,聚合分析的功能,基於地理位置的搜素(距離我當前位置1公里以內的烤內店)
shard和replica
shard:單機器無法存儲大量數據,es可以將一個索引中的數據切分為多個shard,分布在多台服務器上存儲。有了shard就可以橫向擴展,存儲更多數據,讓搜索和分析等操作分不到多態服務器上去執行,提高吞吐量和性能。,每一個share都是一個Lucene index
replica:任何服務器隨時可能故障或宕機,此時shard可能就會丟失,因此可以為每個shard創建多個replica副本。replica可以在shard故障時提供備用服務,保證數據不丟失,多個replica還可以提供檢索操作的吞吐量和性能。primary share(建立索引時一次設置,不能修改,默認5個),replica shard(隨時修改數重,默認1個,默認每個索引10個shard,5個primary shard,5個replica shard,最小的高可用配置,是2台服務器。
index(索引)和type(類型)和document(文檔)
ES中document相當數據庫中的一行。
ES中的type相當數據庫中的表
ES中的index(名詞)相當數據庫中的數據庫,index(動詞):往ES中存入數據
使用
windows啟動
啟動命令(進入bin目錄)
elasticsearch.bat
如果出現
ElasticsearchException[X-Pack is not supported and Machine Learning is not available for [windows-x86]; you can use the other X-Pack features (unsupported) by setting xpack.ml.enabled: false in elasticsearch.yml錯誤
解決:在elasticsearch.yml配置文件最后添加,重新啟動
xpack.ml.enabled: false
訪問瀏覽器
http://127.0.0.1:9200/
出現,表示啟動成功
{ "name" : "xxxx-PC", //表示node(節點名稱):在哪一台服務器上啟動 "cluster_name" : "elasticsearch", //集群名稱,如果需要修改,在conf/elasticsearch.yml中修改 "cluster_uuid" : "SSOU_2kJSW6xsHZFwfLrhg", "version" : { "number" : "7.2.0", "build_flavor" : "default", "build_type" : "zip", "build_hash" : "508c38a", "build_date" : "2019-06-20T15:54:18.811730Z", "build_snapshot" : false, "lucene_version" : "8.0.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
使用kibana
Kibana是一個開源的分析和可視化平台,設計用於和Elasticsearch一起工作。
啟動(bin目錄下)
kabana.bat
打開瀏覽器
http://localhost:5601
使用開發工具(dev tools)操作下面的命令