<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 索引(Index) 一個索引就是一個擁有幾分相似特征的文檔的集合。比如說訂單數據的索引,商品數據的索引。一個索引由一個名字來標識(必須全部是小寫字母)。并且當我們要對這個索引中的文檔進行索引、搜索、更新和刪除的時 候,都要使用到這個名字。 ## 文檔(Document) 一個文檔是一個可被索引的基礎信息單元,也就是一條數據。 ## 字段(Field) 相當于是數據表的字段 ## 分片(Shards) 將索引劃分成多份的能力,每一份就稱之為分片 分片很重要,主要有兩方面的原因: * 允許你水平分割 / 擴展你的內容容量。 * 允許你在分片之上進行分布式的、并行的操作,進而提高性能/吞吐量。 至于一個分片怎樣分布,它的文檔怎樣聚合和搜索請求,是完全由 Elasticsearch 管理的, 對于作為用戶的你來說,這些都是透明的,無需過分關心。 ## 副本(Replicas) 創建分片的一份或多份拷貝,這些拷貝叫做復制分片(副本)。 復制分片之所以重要,有兩個主要原因: * 在分片/節點失敗的情況下,提供了高可用性。因為這個原因,注意到復制分片從不與原/主要(original/primary)分片置于同一節點上是非常重要的。 * 擴展你的搜索量/吞吐量,因為搜索可以在所有的副本上并行運行。 ## 倒排索引 傳統的我們的檢索是通過文章,逐個遍歷找到對應關鍵詞的位置。 而倒排索引,是通過分詞策略,形成了詞和文章的映射關系表,這種詞典+映射表 即為倒排索引。 ## 詞條 索引中最小的存儲和查詢單元 ## 詞典 字典,詞條的集合,數據結構一般是B+ 樹或者 HashMap ## 倒排索引不變 倒排索引被寫入磁盤后是 不可改變的,它永遠不會修改。 不變性有重要的價值: * 不需要鎖。如果你從來不更新索引,你就不需要擔心多進程同時修改數據的問題。 * 一旦索引被讀入內核的文件系統緩存,便會留在哪里,由于其不變性。只要文件系統緩存中還有足夠的空間,那么大部分讀請求會直接請求內存,而不會命中磁盤。這提供了很大的性能提升。 * 其它緩存(像 filter 緩存),在索引的生命周期內始終有效。它們不需要在每次數據改變時被重建,因為數據不會變化。 * 寫入單個大的倒排索引允許數據被壓縮,減少磁盤 I/O 和 需要被緩存到內存的索引的使用量。 ## 動態更新索引 ### 如何在保留不變性的前提下實現倒排索引的更新? 用更多的索引。通過增加新的補充索引來反映新近的修改,而不是直接重寫整個倒排索引。每一個倒排索引都會被輪流查詢到,從最早的開始查詢完后再對結果進行合并。Elasticsearch 基于 Lucene, 這個 java 庫引入了按段搜索的概念。每一 段本身都是一個倒排索引, 但索引在 Lucene 中除表示所有段的集合外, 還增加了提交點的概念 — 一個列出了所有已知段的文件。 ![](https://img.kancloud.cn/82/c6/82c6fc997e4d82810ec9a04bb8f79637_831x499.png) #### 按段搜索會以如下流程執行: 1.新文檔被收集到內存索引緩存 ![](https://img.kancloud.cn/be/1b/be1b0d54df54ff4e8adba7cc4c7ab502_821x592.png) 2. 不時地, 緩存被 提交 (1) 一個新的段—一個追加的倒排索引—被寫入磁盤。 (2) 一個新的包含新段名字的 提交點 被寫入磁盤 (3) 磁盤進行 同步 — 所有在文件系統緩存中等待的寫入都刷新到磁盤,以確保它們被寫入物理文件 3. 新的段被開啟,讓它包含的文檔可見以被搜索 4. 內存緩存被清空,等待接收新的文檔 ![](https://img.kancloud.cn/16/81/1681860ad01b96c3de005c410a345185_830x614.png) 當一個查詢被觸發,所有已知的段按順序被查詢。詞項統計會對所有段的結果進行聚合,以 保證每個詞和每個文檔的關聯都被準確計算。 這種方式可以用相對較低的成本將新文檔添 加到索引。 段是不可改變的,所以既不能從把文檔從舊的段中移除,也不能修改舊的段來進行反映文檔 的更新。 取而代之的是,每個提交點會包含一個 .del 文件,文件中會列出這些被刪除文檔 的段信息。 當一個文檔被 “刪除” 時,它實際上只是在 .del 文件中被 標記 刪除。**一個被標記刪除的文檔仍然可以被查詢匹配到, 但它會在最終結果被返回前從結果集中移除。** 文檔更新也是類似的操作方式:當一個文檔被更新時,舊版本文檔被標記刪除,文檔的新版 本被索引到一個新的段中。 可能兩個版本的文檔都會被一個查詢匹配到,但被刪除的那個 舊版本文檔在結果集返回前就已經被移除。 ## 近實時搜索 在 Elasticsearch 中,寫入和打開一個新段的輕量的過程叫做 refresh 。 默認情況下每個分 片會每秒自動刷新一次。這就是為什么我們說 Elasticsearch 是 近 實時搜索: 文檔的變化 并不是立即對搜索可見,但會在一秒之內變為可見。 可以通過設置 refresh_interval , 降低每個索引的刷新頻率 { "settings": { "refresh_interval": "30s" } } ## 主節點選舉機制 * 每個節點最小的ID,把它選舉為臨時Master,然后對該master進行投票; * 每個節點收集票數,當票數大于指定的法定個數時,成為Master,然后對加入的節點進行集群信息廣播。 ## 路由計算規則 通過 hash 函數生成一個數字,然后這個數字再除以主分片的數量(num_of_primary_shards)后得到余數。 這就解釋了為什么我們要在創建索引的時候就確定好主分片的數量 并且永遠不會改變這個數量:因為如果數量變化了,那么所有之前路由的值都會無效,文檔也再也找不到了。(Redis也是這樣,但是Redis的主分片是可以重新設置數量的) 路由規則可以自定義,默認的是文檔_id ## 分片控制 用戶可以訪問任何一個節點獲取數據,這個節點就是協調節點,他會把請求以輪詢的方式(負載均衡)轉發到其他節點。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看