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

                # 概述 Elasticsearch基于Lucene(搜索引擎庫)的開源搜索引擎,對外提供一系列基于Java和HTTP的API, 目的是通過簡單的RESTful API來隱藏Lucene的復雜性。 具有以下特點: 1. 支持全文檢索 2. 分布式的實時文件存儲,每個字段都被索引并可被搜索 3. 分布式的實時分析搜索引擎 可以對照數關系型據庫來理解Elasticsearch的有關概念。 | 關系型數據庫(Relational DB) | Elasticsearch(搜索引擎) | | --- | --- | | 數據庫(Databases) | Indices | | 表(Tables) | Types | | 行(Rows) | Documents | | 字段(Columns) | Fields | Elasticsearch集群可以包含多個索引(indices)(數據庫),每一個索引可以包含多個類型(types)(表),每一個類型包含多個文檔(documents)(行),然后每個文檔包含多個字段(Fields)(列)。 ## 索引 >索引只是一個把一個或多個分片分組在一起的邏輯空間。可以把索引看成關系型數據庫的表。 然而,索引的結構是為快速有效的全文索引準備的,特別是它不存儲原始值。 Elasticsearch 可以把索引存放在一臺機器或者分散在多臺服務器上,每個索引有一或多個分片(shard),每個分片可以有多個副本(replica)。發送一個新的文檔給集群時,你指定一個目標索引并發送給它的任意一個節點。這個節點知道目標索引有多少分片,并且能夠確定哪個分片應該用來存儲你的文檔。可以更改Elasticsearch的這個行為。現在你需要記住的重要信息是,Elasticsearch使用文檔的唯一標識符來計算文檔應該被放到哪個分片中。索引請求發送到一個節點后,該節點會轉發文檔到持有相關分片的目標節點中。 一次索引操作 ![](https://box.kancloud.cn/6949f2fbc7ae960af3904ac182cf3a5f_708x500.png) ![](https://box.kancloud.cn/3a453de022b51cfd197fb386b41b8173_606x415.png) ## 檢索 嘗試用文檔標識符來獲取文檔時,發送查詢到一個節點,該節點使用同樣的路由算法來決定持有文檔的節點和分片,然后轉發查詢,獲取結果,并把結果發送給你。另一方面,查詢過程更為復雜。除非使用了路由,查詢將直接轉發到單個分片,否則,收到查詢請求的節點會把查詢轉發給保存了屬于給定索引的分片的所有節點,并要求獲取查詢匹配的文檔的最少信息(默認情況下是標識符和得分)。這個過程稱為發散階段(scatter phase)。收到這些信息后,該聚合節點(收到客戶端請求的節點)對結果排序,并發送第2個請求來獲取結果列表所需的文檔(除了標識符和得分以外的所有信息)。這個階段稱為收集階段(gather phase)。這個階段執行完畢后,結果返回到客戶端。 一次查詢請求: curl -X GET http://localhost:9200/megacorp/employee/1? ![](https://box.kancloud.cn/605e56d6cc30de62eedcf4b037ac9ae6_691x491.png) ![](https://box.kancloud.cn/2202ba287328cd5bc35d9e34d89bdfd2_608x421.png) ## 文檔 存儲在Elasticsearch中的主要實體叫文檔(document)。用關系型數據庫來類比的話,一個文檔相當于數據庫表中的一行記錄。相同字段必須有相同類型,文檔由多個字段組成,每個字段可能多次出現在一個文檔里,這樣的字段叫多值字段(multivalued)。每個字段有類型,如文本、數值、日期等。字段類型也可以是復雜類型,一個字段包含其他子文檔或者數組。字段類型在Elasticsearch中很重要,因為它給出了各種操作(如分析或排序)如何被執行的信息。幸好,這可以自動確定,然而,我們仍然建議使用映射。與關系型數據庫不同,文檔不需要有固定的結構,每個文檔可以有不同的字段,此外,在程序開發期間,不必確定有哪些字段。當然,可以用模式強行規定文檔結構。 從客戶端的角度看,文檔是一個JSON對象(關于JSON格式的更多內容,參見http://en.wikipedia.org/wiki/JSON)。每個文檔存儲在一個索引中并有一個Elasticsearch自動生成的唯一標識符和文檔類型。文檔需要有對應文檔類型的唯一標識符,這意味著在一個索引中,兩個不同類型的文檔可以有相同的唯一標識符。 ## 文檔類型 在Elasticsearch中,一個索引對象可以存儲很多不同用途的對象。例如,一個博客應用程序可以保存文章和評論。 文檔類型讓我們輕易地區分單個索引中的不同對象。每個文檔可以有不同的結構,但在實際部署中,將文件按類型區分對數據操作有很大幫助。當然,需要記住一個限制,不同的文檔類型不能為相同的屬性設置不同的類型。例如,在同一索引中的所有文檔類型中,一個叫title的字段必須具有相同的類型 ## 映射 模式映射(schema mapping,或簡稱映射)用于定義索引結構。Elasticsearch在映射中存儲有關字段的信息。每一個文檔類型都有自己的映射,即使我們沒有明確定義。映射在文件中以JSON對象傳送。所以,創建一個映射文件來匹配上述需求,稱之為mapping.json。其內容如下: { "mappings": { "post": { "properties": { "id": {"type":"long", "store":"yes", "precision_step":"0" }, "name": {"type":"string", "store":"yes", "index":"analyzed" }, "published": {"type":"date", "store":"yes", precision_step":"0" }, "contents": {"type":"string", "store":"no", "index":"analyzed" } } } } } 使用上述文件創建posts索引,運行命令: curl -XPOST 'http://localhost:9200/posts' -d @mapping.json ## 分片 當有大量的文檔時,由于內存的限制、硬盤能力、處理能力不足、無法足夠快地響應客戶端請求等,一個節點可能不夠。在這種情況下,數據可以分為較小的稱為分片(shard)的部分(其中每個分片都是一個獨立的Apache Lucene索引)。每個分片可以放在不同的服務器上,因此,數據可以在集群的節點中傳播。 當你查詢的索引分布在多個分片上時,Elasticsearch會把查詢發送給每個相關的分片,并將結果合并在一起,而應用程序并不知道分片的存在。此外,多個分片可以加快索引。 ## 副本 為了提高查詢吞吐量或實現高可用性,可以使用分片副本。副本(replica)只是一個分片的精確復制,每個分片可以有零個或多個副本。換句話說,Elasticsearch可以有許多相同的分片,其中之一被自動選擇去更改索引操作。這種特殊的分片稱為主分片(primary shard),其余稱為副本分片(replica shard)。在主分片丟失時,例如該分片數據所在服務器不可用,集群將副本提升為新的主分片。
                  <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>

                              哎呀哎呀视频在线观看