上一篇已經安裝Elasticsearch的兩個節點 和 Kibana如今進行簡單的操做php
簡單理解對應爲關係型數據庫的 數據庫 表 一行記錄java
若是在postMan中操做須要根據上圖的方式來進行操做ajax
分片shard是es分佈式系統的高可用方案 es會將一份數據進行分片本身理解爲分解數據房租不一樣的機器上(默認爲5份能夠配置) 備份shard默認爲1也就是每一個分片都有一個備份,若是其中的一個分片宕機的話將由備份進行其餘的請求操做實現高可用 , 相同的分片不能和相對於的備份存儲在一臺機器當中。redis
PUT /people 建立一個 人 的索引數據庫
POST /people/man/ 爲索引添加數據 類型會自動建立
{
"name":"redis",
"school":"qinghua",
"introduce":"我是我是我jianqiao",
"age":28,
"birthday":"1996-06-22",
"score":479
}json
如今修改數據 有兩個rabbitmq修改成scalaapi
POST /people/man/AWs_LjUOYHh6lG16ttAd/_update
{
"doc": {
"name":"scala"
}
}elasticsearch
kibana仍是挺方便的能夠自動補全分佈式
文檔刪除post
刪除索引能夠在head中操做也能夠腳本
-----------------------------查詢是es的比較強的一個點-------------------------------
GET _search
{
"query": {
"match_all": {}
}
} 查詢全部
-----------------------------
GET _search
{
"query":{
"match_all":{
}
},
"from":1,
"size":3
} 添加分頁 from從第幾個開始size幾個
--------------------------
GET _search
{
"query":{
"match_all":{
}
},
"sort":[
{
"age":{
"order":"desc"
}
}
],
"_source":[
"age"
]
} 根據年齡排序 _source顯示相關的字段便可 查看更方便
-------------------------
GET _search
{
"query":{
"match":{
"name":"elasticSearch入門 "
}
}
} es會將elasticSearch入門 進行拆分爲elasticSearch和入門 進行匹配只要匹配其中一個都會進行返回
---------------------
GET _search
{
"query":{
"match_phrase":{
"name":"rabbitmq"
}
}
} 這個是完整匹配必須如出一轍的才進行返回如 rabbitmq rabbitmq A 可是rabbitAmq不行
-------------------------------------------------
GET _search
{
"query":{
"terms":{
"name":[
"php",
"ajax"
]
}
}
} 查詢名字是php 和ajax的doc 徹底匹配
GET _search
{
"query":{
"term":{
"score":"479"
}
}
}一個terms和term term會將做爲一個完整的查詢匹配不會進行分詞匹配
------------------------------------------------------
GET _search
{
範圍查詢400-500分數的doc 能夠比較時間now表示當前時間
-----------------------------------------------------
GET _search
{
"size":0,
"aggs":{
"group_haha":{
"terms":{
"field":"age"
}
}
}
} 聚合查詢查詢相同年級的人數有多少個 group_haha隨便定義均可以
GET _search
{
"size":0,
"aggs":{
"group_haha":{
"terms":{
"field":"age"
}
},
"group_hehe":{
"terms":{
"field":"score"
}
}
}
}能夠進行多個聚合同時返回
-------------------------
GET _search
{
"size":0,
"aggs":{
"group_stats":{
"stats":{
"field":"score"
}
}
}
} 能夠進行計算返回最大最小平均總和也能夠直接查詢最小 將關鍵字stats、改成min或max
GET /tvs/sales/_search
{
"size":0,
"query":{
"term":{
"brand":{
"value":"小米" 先進行篩選
}
}
},
"aggs":{
"group_by_color":{
"terms":{
"field":"color" 對篩選的數據進行聚合
}
}
}
}
按每種顏色的平均銷售額降序排序
GET /tvs/sales/_search
{
"size":0,
"aggs":{
"group_by_color":{
"terms":{
"field":"color",
"order":{
"avg_price":"asc"
}
},
"aggs":{
"avg_price":{
"avg":{
"field":"price" //計算出每種顏色的平均價而後進行排序
}
}
}
}
}
}
--------------------------
GET _search
{
"query":{
"multi_match":{
"query":"java",
"fields":[
"introduce",
"name"
]
}
}
} multi_match名稱和介紹包含java就符合條件
後加
GET /forum/article/_search
{
"query":{
"multi_match":{
"query":"java solution", //搜索這兩個關鍵詞
"type":"best_fields",
"fields":[
"title^2",
"content"
], //title^2 boost爲2 匹配title的權重會更高一點
"tie_breaker":0.3, //深刻6中有詳解
"minimum_should_match":"50%"//至少匹配一個
}
}
}
------------------------------------------------------
GET _search
{
"query":{
"query_string":{
"fields":[
"introduce"
],
"query":"java and jianqiao"
}
}
}
GET _search
{
"query":{
"query_string":{
"query":"(java and jianqiao) OR scala"
}
}
}
語法查詢感受這個比較強大可使用關鍵字 and 和or fields能夠去除能夠多個,去除以後查詢整條doc
解釋: query_string直接能夠搜索全部的field,任意一個field包含指定的關鍵字就能夠搜索出來。咱們在進行中搜索的時候,難道是對document中的每個field都進行一次搜索嗎?不是的
es中的_all元數據,在創建索引的時候,咱們插入一條document,它裏面包含了多個field,此時,es會自動將多個field的值,所有用字符串的方式串聯起來,變成一個長的字符串,做爲_all field的值,同時創建索引
後面若是在搜索的時候,沒有對某個field指定搜索,就默認搜索_all field,其中是包含了全部field的值的
舉個例子
{
"name": "jack",
"age": 26,
"email": "jack@sina.com",
"address": "guamgzhou"
}
"jack 26 jack@sina.com guangzhou",做爲這一條document的_all field的值,同時進行分詞後創建對應的倒排索引
-----------------------------
GET _search
{
"query":{
"bool":{
"filter":{
"term":{
"age":"19"
}
}
}
}
}
過濾查詢只查看年齡是19歲的doc term 和terms均可以 bool多個條件組合的使用
單獨使用filter
{
"query":{
"constant_score":{
"filter":{
"range":{
"age":{
"gte":10,
"lte":30
}
}
},
"boost":1.2
}
}
}
--------------------------------------
前綴查詢
{
"query":{
"prefix":{
"name":"sc"
}
}
}
--------------------------------------------------------
標識符查詢針對多個id
{
"query":{
"ids":{
"values":[
"111",
"2",
"3"
]
}
}
}
--------------------------------------------
使用編輯距離的模糊查詢,計算量較大,可是對用戶拼寫錯的場景比較有用
{
"query":{
"fuzzy":{
"name":"abax" //查詢出ajax
}
}
}
-------------------------------------------
支持*和?等通配符 ?:任意字符 *:0個或任意多個字符
{
"query":{
"wildcard":{
"name":"aj*x"
}
}
}
-------------------------------------------
GET _search
{
"query":{
"bool":{
"should":[
{
"match":{
"name":"php"
}
},
{
"match":{
"age":"18"
}
}
]
}
}
} bool should應當知足條件知足其中一個就能夠 或 || 能夠知足條件也能夠不知足
-------------------------------------------------------
GET _search
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"php"
}
},
{
"match":{
"age":"18"
}
}
]
}
}
} 兩個條件都要知足 與的關係
-----------------------------------------------------
GET _search
{
"query":{
"bool":{
"must_not":[
{
"term":{
"name":"php"
}
}
]
}
}
} 不顯示不看名稱是php的doc
使用bool組合查詢
接受如下參數:
must:文檔必須匹配設定條件才能被包含進來
must_not:文檔必須不匹配設定條件才能被包含進來
should:若是知足語句中的任意語句,將增長_source,不然,無任何影響。主要用於修正每一個文檔的相關性得分
filter:必須匹配,但以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文檔
must:必須包含的條件,must not:不包含 ,should:包含的話會更匹配
------------------------批量操做------------------------
GET /_mget
{
"docs":[
{
"_index":"people",
"_type":"man",
"_id":"AWs_K3KEYHh6lG16ttAX"
},
{
"_index":"people",
"_type":"man",
"_id":"AWs_LJiZYHh6lG16ttAZ"
}
]
} 一次查詢多條doc
GET /people/_mget
{
"docs":[
{
"_type":"man",
"_id":"AWs_K3KEYHh6lG16ttAX"
},
{
"_type":"wuman",
"_id":"AWs_LJiZYHh6lG16ttAZ"
}
]
} 一次查詢多條doc 能夠指定不一樣的type
GET /people/man/_mget
{
"ids":["AWs_LJiZYHh6lG16ttAZ"]
}
若是都在同一個index和type中指定ids查詢
在查詢多條記錄的時候使用mget能夠提高es的銷量
-------------------------------------------------------------------
舉例,好比你如今要建立一個文檔,放bulk裏面,看起來會是這樣子的:
{"index": {"_index": "test_index",:"_type", "test_type", "_id": "1"}}
{"test_field1": "test1", "test_field2": "test2"}
有哪些類型的操做能夠執行呢?
(1)delete:刪除一個文檔,只要1個json串就能夠了
(2)create:PUT /index/type/id/_create,強制建立
(3)index:普通的put操做,能夠是建立文檔,也能夠是全量替換文檔
(4)update:執行的partial update操做
POST /_bulk
{"delete":{"_index":"people","_type":"man","_id":"AWs_LV1RYHh6lG16ttAb"}} //刪除doc
{"create":{"_index":"people","_type":"man","_id":"111"}} //建立doc
{ "name":"Elasticsearch","school":"anhui","introduce":"我是我是我Elasticsearch","age":20,"birthday":"1996-06-22","score":434} //編寫數據
{"update":{"_index":"people","_type":"wuman","_id":"AWtFEmkP1ihNSp8xGbqK","_retry_on_conflict":"3"}} //修改doc
{"doc":{"introduce":"你們好dajiahao你們好你們好你們好我是NODEJS"}} //編寫修改的數據
bulk api對json的語法,有嚴格的要求,每一個json串不能換行,只能放一行,同時一個json串和一個json串之間,必須有一個換行/與mget相似 路徑上添加了index和type的話 操做語法中就能夠不加
bulk操做中,任意一個操做失敗,是不會影響其餘的操做的,可是在返回結果裏,會告訴你異常日誌
二、bulk size最佳大小
bulk request會加載到內存裏,若是太大的話,性能反而會降低,所以須要反覆嘗試一個最佳的bulk size。通常從1000~5000條數據開始,嘗試逐漸增長。另外,若是看大小的話,最好是在5~15MB之間。
GET /test_index/test_type/_validate/query?explain
{
"query":{
"math":{
"test_field":"test"
}
}
}
檢測語句是否合法
{
"valid": false,
"error": "org.elasticsearch.common.ParsingException: no [query] registered for [math]"
}
版本爲5.2.0最新版本已經爲7.X可能有差別,都是自學文章歡迎錯誤指正