ElasticSearch(ES)學習筆記


1.概念

ES即為了解決原生Lucene使用的不足,優化Lucene的調用方式,並實現了高可用的分布式集群的搜索方案,其第一個版本於20102月出現在GitHub上並迅速成為最受歡迎的項目之一。

首先,ES的索引庫管理支持依然是基於Apache Lucene(TM)的開源搜索引擎。

ES也使用Java開發並使用Lucene作為其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的 RESTful API來隱藏Lucene的復雜性,從而讓全文搜索變得簡單。

 

ES的核心不在於Lucene,其特點更多的體現為:

 

分布式的實時文件存儲,每個字段都被索引並可被搜索

 

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

 

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

 

高度集成化的服務,你的應用可以通過簡單的 RESTful API、各種語言的客戶端甚至命令行與之交互。

2.es區別於lucene

 

LuceneES聯系,區別:項目中為啥使用ES而不用Lucene.

 

聯系:ElasticSearch封裝了Lucene,讓使用變得更簡單,在高可用上面做得更好。

 

區別:ElasticSearch除了擁有Lucene所有優點以外,還擁有自己優點.

 

     可用性:支持集群沒有單點故障

 

     擴展性:支持集群擴展

 

     在集群環境使用:

 

ElasticSearch

 

   搜索引擎服務器,所有項目都統一訪問索引服務器,可以支持在集群環境使用.

 

Lucene 搜索引擎工具包,必須集成到項目中使用,而在集群環境下,多個服務器都有自己Lucene文件,所以不統一. 不支持在集群環境使用

 

     支持多種語言:ElasticSearch支持很多語言,Lucene支持java

 

     簡單性:ElasticSearch簡單,都是http請求而Lucene復雜,都要調用API執行一大堆操作

 

一般lucene在中小型項目中使用(但是也能使用es),ES在大型項目中使用.因為ES支持在集群環境使用,並且自身也支持集群.

 

3.三大全文

luncene/es/solr

 

SolrES比較:

 

Solr 利用 Zookeeper 進行分布式管理,支持更多格式的數據(HTML/PDF/CSV),官方提供的功能更多在傳統的搜索應用中表現好於 ES,但實時搜索效率低。

 

 ES自身帶有分布式協調管理功能,但僅支持json文件格式,本身更注重於核心功能,高級功能多有第三方插件提供,在處理實時搜索應用時效率明顯高於 Solr

4.es的安裝

 

官方下載地址:https://www.elastic.co/downloads/elasticsearch

安裝運行

修改jvm.options

 

 

 

 運行

訪問測試

 ES集群已經啟動並且正常運行.

 

5.客戶端

 

客戶端可以分為圖形界面客戶端,和代碼客戶端.

 

輔助管理工具Kibana5

 

Kibana5.2.2下載地址:https://www.elastic.co/downloads/kibana

 

② 解壓並編輯config/kibana.yml,設置elasticsearch.url的值為已啟動的ES

 

③ 啟動Kibana5 : bin\kibana.bat

 

 

 

④ 默認訪問地址:http://localhost:5601

 

Discover:可視化查詢分析器

 

Visualize:統計分析圖表

 

Dashboard:自定義主面板(添加圖表)

 

TimelionTimelion是一個kibana時間序列展示組件(暫時不用)

 

Dev Tools Console(同CURL/POSTER,操作ES代碼工具,代碼提示,很方便)

 

Management:管理索引庫(index)、已保存的搜索和可視化結果(save objects)、設置 kibana 服務器屬性。

 

 

 啟動運行訪問

 

6.es的數據管理

--es的文檔

ES是面向文檔(document oriented)的,這意味着它可以存儲整個對象或文檔(document)。然而它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。在ES中,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。

 

_index:索引庫,類似於關系型數據庫里的“數據庫”—它是我們存儲和索引關聯數據的地方。

_type類型,似於關系型數據庫中表.在應用中,我們使用對象表示一些“事物”,例如一個用戶、一篇博客、一個評論,或者一封郵件。可以是大寫或小寫,不能包含下划線或逗號。我們將使用 employee 做為類型名。

_id: _index  _type  組合時,就可以在ELasticsearch中唯一標識一個文檔。當創建一個文檔,你可以自定義 _id  ,也可以讓Elasticsearch幫你自動生成。

另外還包括:_uid文檔唯一標識(_type#_id)

_source:文檔原始數據

_all:所有字段的連接字符串

 

--基本操作

添加

PUT dms/emp/1
{
  "id":1,
  "name":"sss",
  "age":13
}

查詢
get dms/emp/_search

自定義id

POST dms/emp/
{
  "id":2,
  "name":"sss2",
  "age":13
}

#2:修改:a:先刪除再插入
PUT crm/emp/1
{
  "id":1,
  "name":"ads",
  "age":18
}

#2:修改:b:局部修改
POST crm/emp/AWmjggiFZPiESvqs-mqR/_update
{
  "doc": {
    "id":1,
  "name":"xxx",
  "age":17
  }

}

#3:刪除:a:指定一個document刪除
DELETE dms/emp/1
#3:刪除:b:刪除整個索引,刪庫
DELETE dms

# 4:查詢:a:指定一個document的id查詢
GET dms/emp/1
# 4:查詢:b:指定一個document的id查詢,只需要返回數據:source
GET dms/emp/1/_source
# 4:查詢:c:指定一個document的id查詢,只需要返回指定key的數據:只返回source的name的值
GET dms/emp/1/_source?_source=name

 

#5.1不同索引不同類型的數據

GET _mget
{
  "docs":[
    {
  "_index":"dms",
  "_type":"emp",
  "_id":"1"
},{
  "_index":"dms",
  "_type":"emp",
  "_id":"2"
}
    ]
}
#5.2:同一個索引和類型

GET dms/emp/_mget
{
  "ids":[1,2,3]
}
#6.1: 查詢所有的索引數據
GET _search
#6.2:指定索引和分類的查詢
GET dms/emp/_search

#size :每頁多少條 默認是10;   from:從哪里開始,默認從0開始

GET dms/emp/_search?size=2&from=1

字符串查詢

GET dms/emp/_search?q=age:11
es的查詢:TO必須大寫;多個條件使用&拼接;排序:默認是升序asc


GET dms/emp/_search?q=age[10 TO 13]&sort=id:desc&size=2&from=0

6.dsl查詢與過濾

 -- 什么是DSL查詢

ES提供豐富且靈活的查詢語言叫做DSL查詢(Query DSL),它允許你構建更加復雜、強大的查詢。

DSL(Domain Specific Language特定領域語言)JSON請求體的形式出現

 

查詢字符串模式GET dms/emp/_search?q=name:文兵 簡單查詢

 

DSL模式 復雜查詢

 

GET dms/emp/_search

 

{

 

"query" : {

 

   "match" : {

 

    "name" : "sss"

 

}

 

}

 

}

 

 

 

 

7.分詞與映射

1) 集成合適分詞器-ik

        在服務端通過插件集成分詞器

2) 要設置字段的分詞器

        通過客戶端告訴es某個字段要使用某個分詞

 

ESIK分詞器插件源碼地址:https://github.com/medcl/elasticsearch-analysis-ik

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM