<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## ElasticSearch的工作原理 <div style="text-indent:2em;"> 接下來簡單了解一下ElasticSearch的工作原理。 <h3>啟動過程</h3> <p>當ElasticSearch的節點啟動后,它會利用多播(multicast)(或者單播,如果用戶更改了配置)尋找集群中的其它節點,并與之建立連接。這個過程如下圖所示</p> <center><img src="../boostrap.png"/></center> <p>在集群中,一個節點被選舉成主節點(master node)。這個節點負責管理集群的狀態,當群集的拓撲結構改變時把索引分片分派到相應的節點上。 </p> <br/><!--note --> <div style="height:140px;width:650px;text-indent:0em;"> <div style="float:left;width:13px;height:100%; background:black;"> <img src="../lm.png" height="130px" width="13px" style="margin-top:5px;"/> </div> <div style="float:left;width:50px;height:100%;position:relative;"> <img src="../note.png" style="position:absolute; top:30%; "/> </div> <div style="float:left; width:550px;height:100%;"> <p style="font-size:13px;margin-top:6px;">需要注意的是,從用戶的角度來看,主節點在ElasticSearch中并沒有占據著重要的地位,這與其它的系統(比如數據庫系統)是不同的。實際上用戶并不需要知道哪個節點是主節點;所有的操作需求可以分發到任意的節點,ElasticSearch內部會完成這些讓用戶感到不明覺歷的工作。在必要的情況下,任何節點都可以并發地把查詢子句分發到其它的節點,然后合并各個節點返回的查詢結果。最后返回給用戶一個完整的數據集。所有的這些工作都不需要經過主節點轉發(節點之間通過P2P的方式通信)。</p> </div> <div style="float:left;width:13px;height:100%;background:black;"> <img src="../rm.png" height="130px" width="13px" style="margin-top:5px;"/> </div> </div> <br/><!--note end--> <p>主節點會去讀取集群狀態信息;在必要的時候,會進行恢復工作。在這個階段,主節點會去檢查哪些分片可用,決定哪些分片作為主分片。處理完成后,集群就會轉入到黃色狀態。</p> <p>這意味著集群已經可以處理搜索請求了,但是還沒有火力全開(這主要是由于所有的主索引分片(primary shard)都已經分配好了,但是索引副本還沒有)。接下來需要做的事情就是找到復制好的分片,并設置成索引副本。當一個分片的副本數量太少時,主節點會決定將缺少的分片放置到哪個節點中,并且依照主分片創建副本。所有工作完成后,集群就會變成綠色的狀態(表示所有的主分片的索引副本都已經分配完成)。</p> <h3>探測失效節點</h3> <p>在正常工作時,主節點會監控所有的節點,查看各個節點是否工作正常。如果在指定的時間里面,節點無法訪問,該節點就被視為出故障了,接下來錯誤處理程序就會啟動。集群需要重新均衡——由于該節點出現故障,分配到該節點的索引分片丟失。其它節點上相應的分片就會把工作接管過來。換句話說,對于每個丟失的主分片,新的主分片將從剩余的分片副本(Replica)中選舉出來。重新安置新的分片和副本的這個過程可以通過配置來滿足用戶需求。更多相關信息可以參看<span style="font-style:oblique">&nbsp;第4章 分布式索引架構</span>。</p> <p>由于只是展示ElasticSearch的工作原理,我們就以下圖三個節點的集群為例。集群中有一個主節點和兩個數據節點。主節點向其它的節點發送Ping命令然后等待回應。如果沒有得到回應(實際上可能得不到回復的Ping命令個數取決于用戶配置),該節點就會被移出集群。</p> <center><img src="../cluster13.png"/></center> <h3>與ElasticSearch進行通信</h3> <p>我們已經探討了ElasticSearch是如何構建起來的,但是歸根到底,最重要的是如何往ElasticSearch中添加數據以及如何查詢數據。為了實現上述的需求,ElasticSearch提供了精心設計的API。這些主要的API都是基于REST風格(參看http://en.wikipedia.org/wiki/Pepresentational_state_transfer )。而且這些API非常容易與其它能夠處理HTTP請求的系統進行集成。</p> <p>ElasticSearch認為數據應該伴隨在URL中,或者作為請求的主體(request body),以一種JSON格式(http://en.wikipedia.org/wiki/JSON )的文檔發送給服務器。如果讀者用Java或者其它運行在JVM虛擬機上的語言,應該關注一下Java API,它除了是群集中內置的REST風格API外,功能與URL請求是一樣的。</p> <p>值得一提的是在ElasticSearch內部,節點之間的通信也是用相關的Java API。如果想了解關于Java API更多的內容,可以閱讀<span style="font-style:oblique;">&nbsp;第8章 ElasticSearch Java API&nbsp;</span>,但是現在還是簡要了解一下本章提供的一些API的功能和使用方法。注意本章僅僅是對相關知識的簡單提點(作者會假定讀者已經使對這些知識有所了解)。如果事先沒有了解相關知識,強烈建議讀者去學習一下。比如本書就覆蓋了所有的知識點。</p> <h3>索引數據</h3> <p>ElasticSearch提供了4種索引數據的辦法。最簡單的是使用索引API,索引API。通過它可以將文檔添加到指定的索引中去。比如,通過curl工具(訪問http://curl.haxx.se/ ),我們可以通過如下的命令創建一個新的文檔:</p> <blockquote>curl&nbsp;-XPUT&nbsp;http://localhost:9200/blog/article/1&nbsp;-d&nbsp;'{<blockquote>"title": "New version of Elastic Search released!", "content": "...",<br/>"tags": ["announce", "elasticsearch", "release"]</blockquote> }'</blockquote> <p>第2種和第3種辦法可以通過bulk API和UDP bulk API批量添加文檔。通常的bulk API采用HTTP協議,UDP bulk API采用非連接的數據包協議。UDP協議傳輸速度會更快,但是可靠性要差一點。最后一種辦法就是通過river插件。river運行在ElasticSearch集群的節點上,能夠從外部系統中獲取數據。</p> <p>有一點需要注意,索引數據的操作只會發生在主分片(primary shard)上,而不會發生在分片副本(Replica) 上。如果索引數據的請求發送到的節點沒有合適的分片或者分片是副本,那么請求會被轉發到含有主分片的節點。</p> <center><img src="../12index.png"/></center> <h3>數據查詢</h3> <p>查詢API在ElasticSearch中有著很大的比重。通過使用Query DSL(基于JSON,用來構建復雜查詢的語言) ,我們能夠: <ul> <li>使用各種類型的查詢方式,包括:簡單的關鍵詞查詢(termquery) ,短語(phrase)、區間(range)、布爾(boolean)、模糊(fuzzy)、跨度(span)、通配符(wildcard)、地理位置(spatial)等其它類型的查詢方式。</li> <li>通過組合簡單查詢構建出復雜的查詢。</li> <li>過濾文檔,去除不符合標準的文檔而且不影響打分排序。</li> <li>查找給定文檔的相似文檔。</li> <li>查找給定短語的搜索建議和查詢短語修正。</li> <li>通過faceting構建動態的導航和數據統計</li> <li>使用prospective search而且找到匹配寫定文檔的查詢語句。(<span style="font-style:italic">關于prospective search,似乎是一種推送方式。即把用戶的查詢語句存儲到索引中,如果新的文檔添加到索引中,就把文檔關聯到匹配的查詢語句中。這種查詢適合于新聞、博客等會定時更新的應用場景</span>)</li> </ul></p> <p>關于數據查詢,其核心點在于查詢過程不是一個簡單、單一的流程。通常這個過程分為兩個階段:查詢分發階段和結果匯總階段。在查詢分發階段,會從各個分片中查詢數據;在結果匯總階段,會把從各個分片上查詢到的結果進行合并、排序等其它處理過程,然后返回給用戶。</p> <center><img src="../12query.png"/></center> <br/><!--note --> <div style="height:70px;width:650px;text-indent:0em;"> <div style="float:left;width:13px;height:100%; background:black;"> <img src="../lm.png" height="60px" width="13px" style="margin-top:5px;"/> </div> <div style="float:left;width:50px;height:100%;position:relative;"> <img src="../note.png" style="position:absolute; top:20%; "/> </div> <div style="float:left; width:550px;height:100%;"> <p style="font-size:13px;">用戶可以通過指定搜索類型來控制查詢的分發和匯總過程,目前搜索類型只有6種可選值。在Packt的出版的《ElasticSearch Server》一書中,已經講述了查詢范圍(query scope)這一知識點.</p> </div> <div style="float:left;width:13px;height:100%;background:black;"> <img src="../rm.png" height="60px" width="13px" style="margin-top:5px;"/> </div> </div> <!--note --> <h3>索引參數設置</h3> <p>前面已經提到ElasticSearch索引參數的自動化配置和文檔結構及域類型的自動識別。當然,ElasticSearch也允許用戶自行修改默認配置。用戶可以自行配置很多參數,比如通過mapping配置索引中的文檔結構,設置分片(shard)和副本(replica)的的個數,設置文本分析組件……</p> <h3>集群管理和監控</h3> <p>通過管理和監控部分的API,用戶可以更改集群的設置。比如調整節點發現機制(discovery mechanism) 或者更改索引的分片策略。用戶可以查看集群狀態信息,或者每個節點和索引和統計信息。集群監控的API非常廣泛,相關的使用案例將會在<span style="font-style:italic">&nbsp;第5章 管理ElasticSearch</span>。</p> </div>
                  <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>

                              哎呀哎呀视频在线观看