Elasticsearch文檔學習之路一

如何形容es

  • 一個分佈式的實時文檔存儲,每個字段 可以被索引與搜索
  • 一個分佈式實時分析搜索引擎
  • 能勝任上百個服務節點的擴展,並支持 PB 級別的結構化或者非結構化數據

客戶端
在這裏插入圖片描述
通過http與es通信
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

  • VERB 適當的 HTTP 方法 或 謂詞 : GET、 POST、 PUT、 HEAD 或者 DELETE。

  • PROTOCOL http 或者 https(如果你在 Elasticsearch 前面有一個 https 代理)

  • HOST Elasticsearch 集羣中任意節點的主機名,或者用 localhost 代表本地機器上的節點。

  • PORT 運行 Elasticsearch HTTP 服務的端口號,默認是 9200 。

  • PATH API 的終端路徑(例如 _count 將返回集羣中文檔數量)。Path 可能包含多個組件,例如:_cluster/stats 和 _nodes/stats/jvm 。

  • QUERY_STRING 任意可選的查詢字符串參數 (例如 ?pretty 將格式化地輸出 JSON 返回值,使其更容易閱讀)

  • BODY 一個 JSON 格式的請求體 (如果請求需要的話)

索引
名詞:一個 索引 類似於傳統關係數據庫中的一個 數據庫 ,是一個存儲關係型文檔的地方。 索引 (index) 的複數詞爲 indices 或 indexes 。
動詞:索引一個文檔 就是存儲一個文檔到一個 索引 (名詞)中以便被檢索和查詢。這非常類似於 SQL 語句中的 INSERT 關鍵詞,除了文檔已存在時,新文檔會替換舊文檔情況之外。
倒排索引:
關係型數據庫通過增加一個 索引 比如一個 B樹(B-tree)索引 到指定的列上,以便提升數據檢索速度。Elasticsearch 和 Lucene 使用了一個叫做 倒排索引 的結構來達到相同的目的。

  • 默認的,一個文檔中的每一個屬性都是 被索引 的(有一個倒排索引)和可搜索的。一個沒有倒排索引的屬性是不能被搜索到的。我們將在 倒排索引 討論倒排索引的更多細節。
    **put **
    PUT /索引名稱/索引類型/ID
    類似於 庫名 表明 列
    在這裏插入圖片描述
    GET
    直接通過id索引
    GET/索引名稱/索引類型/ID

search 輕量搜索
GET /megacorp/employee/_search/ 獲取所有文檔
根據屬性搜索
查找last_name爲Smith的文檔
/megacorp/employee/_search/?q=last_name:Smith
查找任意字段包含mary的文檔
沒有:xx 即代表_all
GET /_search?q=mary
下一個查詢在 name 字段中包含 john 並且在 tweet 字段中包含 mary 的文檔。實際的查詢就是這樣
+name:john +tweet:mary
面的查詢針對tweents類型,並使用以下的條件:
name 字段中包含 mary 或者 john
date 值大於 2014-09-10
_all 字段包含 aggregations 或者 geo
+name:(mary john) +date:>2014-09-10 +(aggregations geo)

缺點

從之前的例子中可以看出,這種 輕量 的查詢字符串搜索效果還是挺讓人驚喜的。 它的查詢語法在相關參考文檔中有詳細解釋,以便簡潔的表達很複雜的查詢。對於通過命令做一次性查詢,或者是在開發階段,都非常方便。
但同時也可以看到,這種精簡讓調試更加晦澀和困難。而且很脆弱,一些查詢字符串中很小的語法錯誤,像 - , : , / 或者 " 不匹配等,將會返回錯誤而不是搜索結果。
最後,查詢字符串搜索允許任何用戶在索引的任意字段上執行可能較慢且重量級的查詢,這可能會暴露隱私信息,甚至將集羣拖垮。
因爲這些原因,不推薦直接向用戶暴露查詢字符串搜索功能,除非對於集羣和數據來說非常信任他們。
相反,我們經常在生產環境中更多地使用功能全面的 request body 查詢API,除了能完成以上所有功能,還有一些附加功能。但在到達那個階段之前,首先需要了解數據在 Elasticsearch 中是如何被索引的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章