# 基本概念
Elasticsearch有幾個核心概念。開始學習Elasticsearch之前理解這些概念會對整個學習過程有很大的幫助。
## 接近實時(NRT)
Elasticsearch是一個近實時的搜索平臺。這意味著,從索引一個文檔直到這個文檔能夠被搜索到有一個很小的延遲(通常是一秒)。
## 集群(cluster)
一個集群就是由一個或多個節點組織在一起, 它們共同持有你全部的數據, 并一起提供索引和搜索功能。 一個集群由一個唯一的名字標識, 這個名字默認就是“elasticsearch”。 這個名字很重要, 因為一個節點只能通過指定某個集群的名字來加入這個集群。
請確保您在不同環境中不要重復使用相同的集群名字,否則您最終可能會將節點加入到了錯誤的集群中。譬如你可以使用`logging-dev`、`logging-stage`、`logging-prod`來作為開發、演示、生產環境的集群名。
注意,一個集群中只包含一個節點也是合法的。另外,你也可以擁有多個集群,只需確保集群的名字唯一。
## 節點(node)
一個節點是你集群中的一個服務器,作為集群的一部分,它存儲你的數據,參與集群的索引和搜索功能。 和集群類似, 一個節點也是由一個名字來標識的, 默認情況下, 在節點啟動時會隨機分配一個全局唯一標示來作為它的名字,如果你不希望是默認的你也可以自己指定。這個名字在集群管理時很重要,因為在管理過程中,你希望根據這個名稱去確定網絡中的服務器對應的是Elasticsearch集群中的哪個節點。
一個節點可以通過配置集群名稱來加入一個指定的集群。 默認情況下,每個節點都會被安排加入到一個叫做`elasticsearch`的集群中,這意味著,如果你在你的網絡中啟動了若干個節點, 并假定它們能夠相互發現彼此,它們將會自動地形成并加入到一個叫做`elasticsearch`的集群中。
在一個集群里可以擁有任意多個節點。而且,如果當前你的網絡中沒有運行任何Elasticsearch節點,這時啟動一個節點,會默認創建并加入一個叫做`elasticsearch`的單節點集群。
## 索引庫(index)
一個索引庫就是一些擁有相似特征文檔的集合。例如,你可以有一個會員數據的索引庫,一個商品目錄的索引庫,還有一個訂單數據的索引庫。一個索引庫由一個名字來標識(必須全部是小寫字母的),在對 document(文檔)執行 indexing(索引),search(搜索),update(更新)和 delete(刪除)動作時都需要通過此名字來操作。
## 類型(type)
> 警告
>
> Deprecated in 6.0.0.
See [Removal of mapping types](https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html)
A type used to be a logical category/partition of your index to allow you to store different types of documents in the same index, eg one type for users, another type for blog posts. It is no longer possible to create multiple types in an index, and the whole concept of types will be removed in a later version. See [Removal of mapping types](https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html) for more.
## 文檔(document)
文檔是索引信息的基本單位。。理由,你可以擁有某一個會員文檔、一個商品文檔、一個訂單文檔。文檔以[JSON](http://json.org/)格式來表示,[JSON](http://json.org/)是一個到處存在的互聯網數據交互格式。
在一個索引庫或類型里面,你可以存儲任意多的文檔。注意,一個文檔物理上存在于一個索引庫之中,但文檔必須被編入或分配到一個索引庫的類型。
## <span id="getting-started-shards-and-replicas">分片和副本(shards and replicas)</span>
一個索引可以存儲超出單個結點硬件限制的大量數據。比如,一個具有10億文檔的索引庫需要占據1TB的磁盤空間,他將不可能存儲在單一節點、或者處理搜索請求響應會非常慢。
為了解決這個問題,Elasticsearch提供了將索引庫劃分成多個分片的能力。當你創建一個索引庫的時候,你可以指定你想要的分片的數量。每個分片本身也是一個全功能且獨立的“索引”,這個“索引” 可以被放置到集群中的任何節點上。
分片之所以重要,主要有兩方面的原因:
* 允許你水平的拆分與擴展容量
* 允許你在分片(位于多個節點上)之間進行分布式的、并行的操作,進而提高性能與吞吐量
至于分片怎樣分布、搜索請求時它的文檔怎樣聚合返回,完全由Elasticsearch管理,對于用戶來說這些都是透明的。
在一個網絡或云的環境里異常時可預見的。在分片或節點因為某些原因處于離線狀態或者消失的情況下,故障轉移機制是非常有用且強烈推薦的。為此,Elasticsearch允許你為分片創建一份或多份拷貝,這些拷貝叫做副本分片,或者直接叫副本。
副本之所以重要,有兩個主要原因:
* 在分片/節點失敗的情況下,副本提供了高可用性。基于整個原因,副本分片不要與原分片或主要分片存放在同一節點上是非常重要的。
* 因為搜索可以在所有的副本上并行運行,副本可以擴展你的搜索量或吞吐量。
總之,每個索引庫可以被分成多個分片。一個索引也可以被復制0次(即沒有副本) 或多次。一旦復制了,每個索引就有了主分片(作為復制源的分片)和副本分片(主分片的拷貝)。 分片和副本的數量可以在索引創建的時候指定。在索引創建之后,你可以在任何時候動態地改變副本的數量,但是你不能再改變分片的數量。
默認情況下,Elasticsearch中的每個索引分配5個主分片和1個副本。這意味著,如果你的集群中至少有兩個節點,你的索引將會有5個主分片和另外5個復制分片(1個全量拷貝),這樣每個索引總共就有10個分片。
> 注意
>
> 每個Elasticsearch的分片都是一個獨立的Lucene索引。在單個 Lucene 索引中有一個最大的文檔數量限制。從[LUCENE-5843](https://issues.apache.org/jira/browse/LUCENE-5843)的時候開始,該限制為 2,147,483,519(=Interger.MAX_VALUE - 128)個文檔。您可以使用 [_cat/shards](https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-shards.html)api來監控分片大小。
理解了這些基礎概念之后,讓我們開始接觸更有趣的部分......
> my note
>
> 6.0.0開始一個index下只能有一個type([出于何種考慮?](https://elasticsearch.cn/article/337))
> 副本分片不要與原分片或主要分片存放在同一節點上
> 單個 Lucene 索引中最大的文檔數量限制:2,147,483,519(=Interger.MAX_VALUE - 128)
>
> 問題
> * 倒排索引、倒排列表與索引和分片的關系?
> * 單個節點是否有完整的數據?
> * 數據究竟是如何存儲的?
- 入門
- 基本概念
- 安裝
- 探索你的集群
- 集群健康
- 列出所有索引庫
- 創建一個索引庫
- 索引文檔創建與查詢
- 刪除一個索引庫
- 修改你的數據
- 更新文檔
- 刪除文檔
- 批量處理
- 探索你的數據
- 搜索API
- 查詢語言介紹
- 執行搜索
- 執行過濾
- 執行聚合
- 總結
- Elasticsearch設置
- 安裝Elasticsearch
- .zip或.tar.gz文件的安裝方式
- Install Elasticsearch with .zip on Windows
- Debian軟件包安裝方式
- RPM安裝方式
- Install Elasticsearch with Windows MSI Installer
- Docker安裝方式
- 配置Elasticsearch
- 安全配置
- 日志配置
- 重要的Elasticsearch配置
- 重要的系統配置
- 系統設置
- 在jvm.options中設置JVM堆大小
- 禁用swapping
- 文件描述符
- 虛擬內存
- 線程數
- DNS cache settings
- 啟動前檢查
- 堆大小檢查
- 文件描述符檢查
- 內存鎖定檢查
- 最大線程數檢查
- 最大虛擬內存檢查
- Max file size check
- 最大map數檢查
- JVM Client模式檢查
- 串行收集使用檢查
- 系統調用過濾檢查
- OnError與OnOutOfMemoryError檢查
- Early-access check
- G1GC檢查
- Elasticsearch停機
- Elasticsearch升級
- 滾動升級
- 全集群重啟升級
- 索引重建升級
- Set up X-Pack
- Installing X-Pack
- X-Pack Settings
- Watcher Settings
- Configuring Security
- Breaking changes in 6.0
- X-Pack Breaking Changes
- 重大變化
- 6.0的重大變化
- 聚合變化
- Cat API變化
- 客戶端變化
- 集群變化
- 文檔API變化
- 索引變化
- 預處理變化
- 映射變化
- Packaging變化
- Percolator變化
- 插件變化
- 索引重建變化
- 信息統計變化
- DSL查詢變化
- 設置變化
- 腳本變化
- API約定
- 多索引語法
- 索引庫名稱的日期運算
- 常用選項
- URL-based訪問控制
- 文檔APIs
- 讀寫文檔
- 索引接口
- Get接口
- Delete API
- Delete By Query API
- Update API
- Update By Query API
- Multi Get API
- Bulk API
- Reindex API
- Term Vectors
- Multi termvectors API
- ?refresh
- 搜索APIs
- Search
- URI Search
- Request Body Search
- Query
- From / Size
- Sort
- Source filtering
- Fields
- Script Fields
- Doc value Fields
- Post filter
- Highlighting
- Rescoring
- Search Type
- Scroll
- Preference
- Explain
- Version
- Index Boost
- min_score
- Named Queries
- Inner hits
- Field Collapsing
- Search After
- Search Template
- Multi Search Template
- Search Shards API
- Suggesters
- Term suggester
- Phrase Suggester
- Completion Suggester
- Context Suggester
- Returning the type of the suggester
- Multi Search API
- Count API
- Validate API
- Explain API
- Profile API
- Profiling Queries
- Profiling Aggregations
- Profiling Considerations
- Field Capabilities API
- Aggregations
- Metrics Aggregations
- 平均值聚合
- 值計數聚合(Value Count Aggregation)
- Cardinality Aggregation
- Extended Stats Aggregation
- 地理邊界聚合
- 地理重心聚合
- Max Aggregation
- Min Aggregation
- Percentiles Aggregation
- Percentile Ranks Aggregation
- Scripted Metric Aggregation
- Stats Aggregation
- Sum Aggregation
- Top hits Aggregation
- Value Count Aggregation
- Bucket Aggregations
- 鄰接矩陣聚合
- Children Aggregation
- Date Histogram Aggregation
- Date Range Aggregation
- Significant Terms Aggregation
- Filter Aggregation(過濾器聚合)
- Filters Aggregation
- Geo Distance Aggregation(地理距離聚合) 轉至元數據結尾
- GeoHash grid Aggregation(GeoHash網格聚合)
- Global Aggregation(全局聚合) 轉至元數據結尾
- Histogram Aggregation
- IP Range Aggregation(IP范圍聚合)
- Missing Aggregation
- Nested Aggregation(嵌套聚合)
- Range Aggregation(范圍聚合)
- Reverse nested Aggregation
- Sampler Aggregation
- Significant Terms Aggregation
- Significant Text Aggregation
- Terms Aggregation
- Pipeline Aggregations
- Avg Bucket Aggregation
- Derivative Aggregation(導數聚合)
- Max Bucket Aggregation
- Min Bucket Aggregation
- Sum Bucket Aggregation
- Stats Bucket Aggregation
- Extended Stats Bucket Aggregation(擴展信息桶聚合)
- Percentiles Bucket Aggregation(百分數桶聚合)
- Moving Average Aggregation
- Cumulative Sum Aggregation(累積匯總聚合)
- Bucket Script Aggregation(桶腳本聚合)
- Bucket Selector Aggregation(桶選擇器聚合)
- Serial Differencing Aggregation(串行差異聚合)
- Matrix Aggregations
- Matrix Stats
- Caching heavy aggregations
- Returning only aggregation results
- Aggregation Metadata
- Returning the type of the aggregation
- Indices APIs
- Create Index /創建索引
- Delete Index /刪除索引
- Get Index /獲取索引
- Indices Exists /索引存在
- Open / Close Index API /啟動關閉索引
- Shrink Index /縮小索引
- Rollover Index/滾動索引
- Put Mapping /提交映射
- Get Mapping /獲取映射
- Get Field Mapping /獲取字段映射
- Types Exists
- Index Aliases
- Update Indices Settings
- Get Settings
- Analyze
- Explain Analyze
- Index Templates
- 索引統計信息
- 索引段
- 索引恢復
- 索引分片存儲
- 清理緩存
- 刷新
- 同步刷新
- 重新加載
- 強制合并
- Cat APIs
- cat aliases
- cat allocation
- cat count
- cat fielddata
- cat health
- cat indices
- cat master
- cat nodeattrs
- cat nodes
- cat pending tasks
- cat plugins
- cat recovery
- cat repositories
- cat segments
- cat shards
- cat thread pool
- cat snapshots
- cat templates
- Cluster APIs
- 集群健康
- 集群狀態
- 集群統計
- 掛起的集群任務
- 集群重新路由
- Cluster Update Settings
- Nodes Stats
- Nodes Info
- Nodes Feature Usage
- Remote Cluster Info
- Task Management API
- Nodes hot_threads
- Cluster Allocation Explain API
- Query DSL
- 查詢context與過濾context
- Match All Query
- 全文搜索
- 匹配查詢
- 短語匹配查詢
- 短語前綴匹配查詢
- 多字段查詢
- 常用術語查詢
- 查詢語句查詢
- 簡單查詢語句
- Term level queries
- Term Query
- Terms Query
- Range Query
- Exists Query
- Prefix Query
- Wildcard Query
- Regexp Query
- Fuzzy Query
- Type Query
- Ids Query
- 復合查詢
- Constant Score 查詢
- Bool 查詢
- Dis Max 查詢
- Function Score 查詢
- Boosting 查詢
- Joining queries
- Has Child Query
- Has Parent Query
- Nested Query(嵌套查詢)
- Parent Id Query
- Geo queries
- GeoShape Query(地理形狀查詢)
- Geo Bounding Box Query(地理邊框查詢)
- Geo Distance Query(地理距離查詢)
- Geo Polygon Query(地理多邊形查詢)
- Specialized queries
- More Like This Query
- Script Query
- Percolate Query
- Span queries
- Span Term 查詢
- Span Multi Term 查詢
- Span First 查詢
- Span Near 查詢
- Span Or 查詢
- Span Not 查詢
- Span Containing 查詢
- Span Within 查詢
- Span Field Masking 查詢 轉至元數據結尾
- Minimum Should Match
- Multi Term Query Rewrite
- Mapping
- Removal of mapping types
- Field datatypes
- Array
- Binary
- Range
- Boolean
- Date
- Geo-point datatype
- Geo-Shape datatype
- IP datatype
- Keyword datatype
- Nested datatype
- Numeric datatypes
- Object datatype
- Text
- Token數
- 滲濾型
- join datatype
- Meta-Fields
- _all field
- _field_names field
- _id field
- _index field
- _meta field
- _routing field
- _source field
- _type field
- _uid field
- Mapping parameters
- analyzer(分析器)
- normalizer(歸一化)
- boost(提升)
- Coerce(強制類型轉換)
- copy_to(合并參數)
- doc_values(文檔值)
- dynamic(動態設置)
- enabled(開啟字段)
- eager_global_ordinals
- fielddata(字段數據)
- format (日期格式)
- ignore_above(忽略超越限制的字段)
- ignore_malformed(忽略格式不對的數據)
- index (索引)
- index_options(索引設置)
- fields(字段)
- Norms (標準信息)
- null_value(空值)
- position_increment_gap(短語位置間隙)
- properties (屬性)
- search_analyzer (搜索分析器)
- similarity (匹配方法)
- store(存儲)
- Term_vectors(詞根信息)
- Dynamic Mapping
- Dynamic field mapping(動態字段映射)
- Dynamic templates(動態模板)
- default mapping(mapping中的_default_)
- Analysis
- Anatomy of an analyzer(分析器的分析)
- Testing analyzers(測試分析器)
- Analyzers(分析器)
- Configuring built-in analyzers(配置內置分析器)
- Standard Analyzer(標準分析器)
- Simple Analyzer(簡單分析器)
- 空白分析器
- Stop Analyzer
- Keyword Analyzer
- 模式分析器
- 語言分析器
- 指紋分析器
- 自定義分析器
- Normalizers
- Tokenizers(分詞器)
- Standard Tokenizer(標準分詞器)
- Letter Tokenizer
- Lowercase Tokenizer (小寫分詞器)
- Whitespace Analyzer
- UAX URL Email Tokenizer
- Classic Tokenizer
- Thai Tokenizer(泰語分詞器)
- NGram Tokenizer
- Edge NGram Tokenizer
- Keyword Analyzer
- Pattern Tokenizer
- Simple Pattern Tokenizer
- Simple Pattern Split Tokenizer
- Path Hierarchy Tokenizer(路徑層次分詞器)
- Token Filters(詞元過濾器)
- Standard Token Filter
- ASCII Folding Token Filter
- Flatten Graph Token Filter
- Length Token Filter
- Lowercase Token Filter
- Uppercase Token Filter
- NGram Token Filter
- Edge NGram Token Filter
- Porter Stem Token Filter
- Shingle Token Filter
- Stop Token Filter
- Word Delimiter Token Filter
- Word Delimiter Graph Token Filter
- Stemmer Token Filter
- Stemmer Override Token Filter
- Keyword Marker Token Filter
- Keyword Repeat Token Filter
- KStem Token Filter
- Snowball Token Filter
- Phonetic Token Filter
- Synonym Token Filter
- Synonym Graph Token Filter
- Compound Word Token Filters
- Reverse Token Filter
- Elision Token Filter
- Truncate Token Filter
- Unique Token Filter
- Pattern Capture Token Filter
- Pattern Replace Token Filter
- Trim Token Filter
- Limit Token Count Token Filter
- Hunspell Token Filter
- Common Grams Token Filter
- Normalization Token Filter
- CJK Width Token Filter
- CJK Bigram Token Filter
- Delimited Payload Token Filter
- Keep Words Token Filter
- Keep Types Token Filter
- Classic Token Filter
- Apostrophe Token Filter
- Decimal Digit Token Filter
- Fingerprint Token Filter
- Minhash Token Filter
- Character Filters(字符過濾器)
- HTML Strip Character Filter
- Mapping Character Filter
- Pattern Replace Character Filter
- 模塊
- Cluster
- 集群級路由和碎片分配
- 基于磁盤的分片分配
- 分片分配awareness
- 分片分配過濾
- Miscellaneous cluster settings
- Scripting
- Painless Scripting Language
- Lucene Expressions Language
- Advanced scripts using script engines
- Snapshot And Restore
- Thread Pool
- Index Modules(索引模塊)
- 預處理節點
- Pipeline Definition
- Ingest APIs
- Put Pipeline API
- Get Pipeline API
- Delete Pipeline API
- Simulate Pipeline API
- Accessing Data in Pipelines
- Handling Failures in Pipelines
- Processors
- Monitoring Elasticsearch
- X-Pack APIs
- X-Pack Commands
- How To
- Testing(測試)
- Glossary of terms
- Release Notes
- X-Pack Release Notes