Elasticsearch是一個高度可擴展的開源全文搜索和分析引擎,它容許你快速,近實時地存儲,搜索和分析大量數據,它一般用做底層引擎/技術,爲具備複雜搜索功能和要求的應用程序提供支持。node
Elasticsearch既簡單又複雜,到目前爲止,咱們已經瞭解了它的基礎知識,如何查看它,以及如何使用一些REST API來使用它,但願本教程能讓你更好地瞭解Elasticsearch的內容,更重要的是,啓發你進一步嘗試其他的強大功能!segmentfault
本節包含有關如何設置Elasticsearch並使其運行的信息,包括:下載,安裝,啓動,配置。緩存
官方支持的操做系統和JVM矩陣可在此處得到:支持矩陣,Elasticsearch在列出的平臺上進行了測試,但它也可能在其餘平臺上運行。安全
Elasticsearch經過HTTP使用JSON公開REST API。app
除非另有說明,本章列出的約定能夠在整個REST API中應用。elasticsearch
許多用戶使用基於url的訪問控制的代理來安全訪問Elasticsearch索引,對於多搜索、多獲取和批量請求,用戶能夠選擇在URL中以及在請求體中的每一個請求上指定索引,這可能使基於url的訪問控制具備挑戰性。函數
爲了防止用戶覆蓋URL中指定的索引,將此設置添加到elasticsearch.yml
文件中:測試
rest.action.multi.allow_explicit_index: false
默認值爲true
,但當設置爲false
時,Elasticsearch將拒絕在請求體中指定的顯式索引的請求。url
本節首先簡要介紹Elasticsearch的數據複製模型,而後詳細介紹如下CRUD API。
全部CRUD API都是單索引API,
index
參數接受單個索引名,或指向單個索引的別名。
這個系列中的聚合基於以某種方式從正在聚合的文檔中提取的值計算指標,這些值一般從文檔的字段中提取(使用字段數據),但也可使用腳本生成。
數值指標聚合是輸出數值的一種特殊類型的指標聚合,一些聚合輸出單個數值指標(例如avg
),稱爲single-value numeric metrics aggregation
,另外一些聚合生成多個指標(例如stats
),稱爲multi-value numeric metrics aggregation
,當這些聚合充當一些桶聚合的直接子聚合時,單值和多值數字指標聚合之間的區別就發揮了做用(一些桶聚合使你可以根據每一個桶中的數字指標對返回的桶進行排序)。
桶聚合不像指標聚合那樣在字段上計算指標,而是建立文檔桶,每一個桶都與一個標準相關聯(取決於聚合類型),這決定當前上下文中的文檔是否「落入」它,換句話說,桶有效地定義了文檔集,除了桶自己以外,bucket
聚合還計算並返回「落入」每一個桶中的文檔數量。
與metrics
聚合相反,桶聚合能夠包含子聚合,這些子聚合將聚合它們的「父」桶聚合建立的桶。
有不一樣的桶聚合器,每一個聚合器都有不一樣的「bucketing」策略,一些定義單個桶,一些定義固定數量的多個桶,還有一些在聚合過程當中動態建立桶。
單個響應中容許的最大桶數受到名爲search.max_buckets
的動態集羣設置的限制,默認狀況下它是禁用的(-1
),可是試圖返回超過10,000個桶(將來版本的默認值)的請求將記錄一個棄用警告。
管道聚合
索引API用於管理各個索引,索引設置,別名,映射和索引模板。
Elasticsearch提供基於JSON的完整的查詢DSL(領域特定語言)來定義查詢,將查詢DSL看做查詢的AST(抽象語法樹),由兩種類型的子句組成:
葉查詢子句 - 葉查詢子句查找特定字段中的特定值,例如match
、term
或range
查詢,這些查詢能夠被它本身使用。
複合查詢子句 - 複合查詢子句包裝其餘葉子或複合查詢,並用於以邏輯方式組合多個查詢(如bool
或dis_max
查詢),或更改其行爲(如constant_score
查詢)。
查詢子句的行爲取決於它們是用於查詢上下文仍是過濾器上下文。