Elasticsearch学习笔记1
2019獨角獸企業重金招聘Python工程師標準>>>
啟動es:
/bin/elasticsearch
瀏覽器訪問: http://localhost:9400/_count?pretty請求文檔數量,?pretty表示格式化輸出
一個 Elasticsearch 集群可以 包含多個索引 ,相應的每個索引可以包含多個類型。 這些不同的類型存儲著多個文檔 ,每個文檔又有多個屬性
索引(名詞):
如前所述,一個 索引 類似于傳統關系數據庫中的一個 數據庫 ,是一個存儲關系型文檔的地方。 索引 (index) 的復數詞為 indices 或 indexes 。索引(動詞):
索引一個文檔 就是存儲一個文檔到一個 索引 (名詞)中以便它可以被檢索和查詢到。這非常類似于 SQL 語句中的 INSERT 關鍵詞,除了文檔已存在時新文檔會替換就文檔情況之外。倒排索引:
關系型數據庫通過增加一個 索引 比如一個 B樹(B-tree)索引 到指定的列上,以便提升數據檢索速度。Elasticsearch 和 Lucene 使用了一個叫做 倒排索引 的結構來達到相同的目的。一個文檔必須包含三個元數據:
_index 索引 _type 對象類別 _id 文檔標識文檔增刪改查
增加
POST http://localhost:9400/megacorp/employee/1 {"first_name" : "Douglas","last_name" : "Fir","age" : 35,"about": "I like to build cabinets","interests": [ "forestry" ] }如果指定的ID的文檔已經存在的話,將會覆蓋這個ID的文檔數據
如果數據沒有自然的ID,ElasticSearch可以自動生成ID,這時應該如下增加數據:
POST http://localhost:9400/megacorp/employee/ {"title": "My second blog entry","text": "Still trying this out...","date": "2014/01/01" }如果想在對應的ID不存在時才進行索引文檔的話,增加_create或者設置op_type為create如下操作:
POST http://localhost:9400/megacorp/employee/1/_create or POST http://localhost:9400/megacorp/employee/1/_create?op_type=create修改
同創建時的PUT方法,增加_update表示更新文檔一部分 可以增加?version參數進行并發下的沖突處理
POST /website/blog/1/_update {"doc" : {"tags" : [ "testing" ],"views": 0} }刪除
DELETE http://localhost:9400/megacorp/employee/1查找
GET http://localhost:9400/megacorp/employee/_search搜索
檢查文檔是否存在
HEAD /megacorp/employee/1Query-string搜索
GET /megacorp/employee/_search返回結果放在數組 hits 中。一個搜索默認返回十條結果。
可以將簡單的搜索條件放到url中:
GET http://localhost:9400/megacorp/employee/_search?q=first_name:John查詢表達式
簡單查詢
GET /megacorp/employee/_search {"query" : {"match" : {"last_name" : "Smith"}} }增加過濾查詢
GET /megacorp/employee/_search {"query" : {"bool": {"must": {"match" : {"last_name" : "smith" }},"filter": {"range" : {"age" : { "gt" : 30 } } }}} }短語匹配match_phrase 和match的區別:match_phrase會明確匹配查詢的條件,不會進行分詞查詢,match會分詞查詢
高亮查詢
查詢結果會在句子中匹配的詞組增加<em>標簽包裹,
詳細高亮查詢:高亮查詢
GET /megacorp/employee/_search {"query" : {"match_phrase" : {"about" : "rock climbing"}},"highlight": {"fields" : {"about" : {}}} }查詢可以指定timeout時間
GET /_search?timeout=10ms查詢分頁
GET /_search?size=5 GET /_search?size=5&from=5 GET /_search?size=5&from=10在分布式系統中深度分頁
理解為什么深度分頁是有問題的,我們可以假設在一個有 5 個主分片的索引中搜索。 當我們請求結果的第一頁(結果從 1 到 10 ),每一個分片產生前 10 的結果,并且返回給 協調節點 ,協調節點對 50 個結果排序得到全部結果的前 10 個。
現在假設我們請求第 1000 頁--結果從 10001 到 10010 。所有都以相同的方式工作除了每個分片不得不產生前10010個結果以外。 然后協調節點對全部 50050 個結果排序最后丟棄掉這些結果中的 50040 個結果。
可以看到,在分布式系統中,對結果排序的成本隨分頁的深度成指數上升。這就是 web 搜索引擎對任何查詢都不要返回超過 1000 個結果的原因。
轉載于:https://my.oschina.net/u/2299936/blog/1560391
總結
以上是生活随笔為你收集整理的Elasticsearch学习笔记1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: scrapy 的三个入门应用场景
- 下一篇: 手把手教你用CAB发布OCX的简单办法