索引:有相同屬性的文檔集合(比如一個數據庫)注:英文字母小寫html
類型:索引能夠定義一個或者多個類型,文檔必須屬於一個類型(至關與一張表)數據庫
文檔:文檔是能夠背索引的基本數據單位(至關於一條數據)json
和索引相關的有「分片」和「備份」:數組
分片:每一個索引都有多個分片,每一個分片是一個Lucene索引app
注:假如一個索引數據量很大,就會產生硬盤壓力很大。因此就要‘分片’來分擔壓力。能夠水平的擴展和拆分以及分佈式的操做,能夠提升搜索和其餘操做。ES默認建立索引時會建立5個分片,1個備份。分片的數量只能在建立索引時指定,不能在後期修改,而備份是能夠動態修改的less
備份:拷貝一份分片就完成了分片的備份,注:當一個主分片失敗或出現問題時,"備份分片"就能夠代替工做,從而提升了ES的可用性,備份的分片還能夠執行搜索的操做,來分攤搜索的壓力。elasticsearch
RESTful API:分佈式
基本格式:http://<ip>:<port>/<索引>/<類型>/<文檔id>函數
經常使用http動詞:GET/PUT/POST/DELETEpost
建立book索引成功後以下圖:
打開postman,按圖操做:
主要就是在postman中新建了一個people索引,而且配置了mappings配置項,主要配置內容爲:
{ "settings":{ "number_of_shards":3, "number_of_replicas":1 }, "mappings":{ "man":{ "properties":{ "name":{ "type":"text" }, "country":{ "type":"keyword" }, "age":{ "type":"integer" }, "date":{ "type":"date", "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } } } } }
注:低版本的es不支持"type" : "text"改爲 "type" : "String" 就好
發送命令後建立成功會看到以下圖所示:
建立了三個分片一個備份
並且mapping中包含建立索引時的結構化信息:
還能夠在已經建立好的索引上修改mappings,具體能夠參看這篇文章:https://www.cnblogs.com/yepei/p/6730690.html,主要操做:
如圖,url中指定了文檔id爲1,根據先前定義好的結構化類型參數進行json賦值,點擊send後控制檯返回
點擊數據瀏覽就可看到咱們以前插入的數據:
自動產生文檔id插入的操做十分簡單,只須要把提交方式改成「post」,另外把url中指定的id去掉(此處要自動生成),點send便可:
從控制檯返回的消息中咱們能夠看到,已經自動產生了文檔id
刷新head的數據瀏覽界面可見新插入的數據:
如圖,經過 RESTful API 直接修改文檔十分簡單,只須要在文檔id後指定要執行的操做(這裏執行修改操做,即_update),而後把要修改的內容寫到」doc「中,選擇POST提交便可
更新記錄就是使用 PUT 請求,從新發送一次數據。
摘自:http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
該方法和上面一種方法只在輸入的json內容上有不一樣:
{ "script":{ "lang":"painless", "inline":"ctx._source.age=params.age", "params":{ "age":100 } } }
如上所示,將修改操做寫進」script「中,指定腳本語言爲」painless「,ctx表示當前上下文,_source表示源碼,這裏將age做爲參數傳入,進行修改
只須要在url中加上要刪除的文檔id,選擇DELETE方式提交請求便可,如刪除索引people中man類型的文檔1:
能夠直接在head插件中刪除,也可使用uri的方式,如刪除people索引:
a. 查詢id爲1的文檔:
b. 返回novel類型下全部文檔:
a. 查詢全部數據,從位置1開始,只返回一條結果:
{ "query":{ "match_all":{} }, "from":1, "size":1 }
查詢語句如上,要寫在」query「裏,"match_all"表示查詢全部,」from「 指定位移(默認從0開始),」size「表示顯示記錄條數(默認10條)查詢結果以下:
{ "took": 6, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 6, "max_score": 1, "hits": [ { "_index": "book", "_type": "novel", "_id": "v4A5GWIBAZIrIv_UKnkq", "_score": 1, "_source": { "author": "李六", "publish_date": "1995-03-15", "tittle": "es哈哈哈學習", "word_count": 30000 } } ] } }
上面代碼中,返回結果的 took
字段表示該操做的耗時(單位爲毫秒),timed_out
字段表示是否超時,hits
字段表示命中的記錄,裏面子字段的含義以下。
total
:返回記錄數,本例是 2 條。max_score
:最高的匹配程度,本例是1.0
。hits
:返回的記錄組成的數組。
返回的記錄中,每條記錄都有一個_score
字段,表示匹配的程序,默認是按照這個字段降序排列。
b. 設置score排序規則,按照」publish_date「字段降序排列:
{ "query":{ "match":{ "tittle":"es學習" } }, "sort":[ {"publish_date":{"order":"desc"}} ] }
查詢結果:
{ "took": 243, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 3, "max_score": null, "hits": [ { "_index": "book", "_type": "novel", "_id": "voA4GWIBAZIrIv_UcHlf", "_score": null, "_source": { "author": "王五", "publish_date": "1995-03-17", "tittle": "es學習", "word_count": 20000 }, "sort": [ 795398400000 ] }, { "_index": "book", "_type": "novel", "_id": "v4A5GWIBAZIrIv_UKnkq", "_score": null, "_source": { "author": "李六", "publish_date": "1995-03-16", "tittle": "es哈哈哈學習", "word_count": 30000 }, "sort": [ 795312000000 ] }, { "_index": "book", "_type": "novel", "_id": "wIA5GWIBAZIrIv_UlXlz", "_score": null, "_source": { "author": "田七", "publish_date": "1995-03-15", "tittle": "es稀里嘩啦", "word_count": 30000 }, "sort": [ 795225600000 ] } ] } }
如上查詢結果,」_score「字段爲null,由於這裏自定義了排序規則,結果按照」publish_date「降序排列
a. 分別按照」word_count「和」publish_date「進行聚合查詢
{ "aggs":{ "group_by_word_count":{ "terms":{ "field":"word_count" } }, "group_by_publish_date":{ "terms":{ "field":"publish_date" } } } }
聚合查詢要使用」aggs「字段,後面的」group_by_word_count「以及」group_by_publish_date「是自定義的聚合查詢名稱,而後在」terms「字段下用」field「指明要聚合的字段,查詢結果以下:
"aggregations": { "group_by_publish_date": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": 795225600000, "key_as_string": "1995-03-15 00:00:00", "doc_count": 4 }, { "key": 795312000000, "key_as_string": "1995-03-16 00:00:00", "doc_count": 1 }, { "key": 795398400000, "key_as_string": "1995-03-17 00:00:00", "doc_count": 1 } ] }, "group_by_word_count": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": 30000, "doc_count": 3 }, { "key": 4000, "doc_count": 1 }, { "key": 20000, "doc_count": 1 }, { "key": 50000, "doc_count": 1 } ] } }
b. 其餘功能函數的使用:
{ "aggs":{ "grades_word_count":{ "stats":{ "field":"word_count" } } } }
上述查詢語句對「word_count」字段進行計算,查詢結果以下:
"aggregations": { "grades_word_count": { "count": 6, "min": 4000, "max": 50000, "avg": 27333.333333333332, "sum": 164000 } }
求出了最小值,最大值,平均值等。
http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html(阮一峯老師的博客,該博客還提到了中文分詞器ik的安裝,能夠參考)