ES是一個(gè)分布式可擴(kuò)展的實(shí)時(shí)搜索和分析引擎。
使用場景:全文搜索,結(jié)構(gòu)化數(shù)據(jù),統(tǒng)計(jì),查詢定位,地理定位,自動完成,查找提示等
入門
ES基于lecene
lecene是個(gè)框架,需要使用java,并在程序中集成lucene
ES用java編寫,在lecene基礎(chǔ)上,使用restful API,無需了解lucene原理
而且是ES是分布式
ES從lucene上的抽象層發(fā)展起來
安裝
先安裝java
安裝ES
安裝sense
與ES通信
java api,ES內(nèi)置
通過http向restful api傳送json,curl
啟程
ES是面向文檔型數(shù)據(jù)庫,而不是傳統(tǒng)關(guān)系數(shù)據(jù)庫
ES的數(shù)據(jù)格式是JSON
類比關(guān)系數(shù)據(jù):
數(shù)據(jù)庫-》表-》行-》列
索引-》類型-》文檔-》字段
索引作為名稱,類似關(guān)系型DB中數(shù)據(jù)庫,做動詞類似insert命令,關(guān)系型DB中的索引在ES中對應(yīng)的是反向索引
基本搜索
存儲文檔:put /a/b/1 a為索引,b為類型,1是id
獲取文檔:get /a/b/1
delete刪除,head查詢是否存在,替換還是put
全體檢索 get /a/b/_search
帶關(guān)鍵字檢索 get /a/b/_search?q=xx
DSL(領(lǐng)域特定語言)搜索,搜索條件為json串
帶過濾的搜索,json中有filtered,下層為filter和match
全文搜索:_score代表相關(guān)性評分
短語整體匹配:match_phrase
高亮搜索:highlight,返回結(jié)果用<em></em>包住
匯總統(tǒng)計(jì):aggs,類似sql中g(shù)roup by
搜索
空白搜索
不加搜索條件即可,默認(rèn)只返回前10個(gè)結(jié)果
hits:匹配的文檔。total代表匹配的數(shù)量,子hits中包括了index,type,id和具體結(jié)果
_score是相關(guān)性,沒加查詢條件就是1.max_score就是_score中最大值
took代表請求耗費(fèi)的時(shí)間,單位毫秒
shards是參與查詢的分片數(shù),及成功和失敗的個(gè)數(shù)
time_out告訴我們是否查詢超時(shí)。我們可以在查詢中設(shè)置這個(gè)參數(shù)。timeout不是終止查詢,而是返回指定時(shí)間內(nèi)已經(jīng)查到的數(shù)據(jù)
多索引多類型
在/_search前添加路徑,可以指定索引和類型
比如/gb,us/user,tweet/_search就是搜索索引gb和us中類型us及類型tweet的所有文檔
size參數(shù)是每次返回的結(jié)果數(shù),from是起始的結(jié)果編號
頁碼過大會有問題。因?yàn)檎埱笞畲?00條,是每個(gè)節(jié)點(diǎn)都請求100條,然后再整體處理。
搜索api分兩種,一種是精簡版的,一種json的完整版
?q=a:b 查詢所有字段a值為b的文檔 +c:d 增加條件 -e:f 絕對不匹配條件
_all全匹配,在路徑中可以使用
舉例:字段name包括mary或john,date>2014-9-10,_all字段包含aggregations或geo
+name:(mary john) +date:>2014-09-10 +(aggregations geo)