007-elasticsearch【一】概述、Elasticsearch 訪問方式、Elasticsearch 面向文檔、常用概念
一、概述
Elasticsearch 是一個開源的搜索引擎,建立在一個全文搜索引擎庫 Apache Lucene™ 基礎之上。
Elasticsearch 也是使用 Java 編寫的,它的內部使用 Lucene 做索引與搜索,但是它的目標是使全文檢索變得簡單, 通過隱藏 Lucene 的復雜性,取而代之的提供一套簡單一致的 RESTful API。
然而,Elasticsearch 不僅僅是 Lucene,並且也不僅僅只是一個全文搜索引擎。 它可以被下面這樣準確的形容:
一個分布式的實時文檔存儲,每個字段 可以被索引與搜索
一個分布式實時分析搜索引擎
能勝任上百個服務節點的擴展,並支持 PB 級別的結構化或者非結構化數據
二、Elasticsearch 訪問方式
2.1、Java API
如果你正在使用 Java,在代碼中你可以使用 Elasticsearch 內置的兩個客戶端:
節點客戶端(Node client)
節點客戶端作為一個非數據節點加入到本地集群中。換句話說,它本身不保存任何數據,但是它知道數據在集群中的哪個節點中,並且可以把請求轉發到正確的節點。
傳輸客戶端(Transport client)
兩個 Java 客戶端都是通過 9300 端口並使用本地 Elasticsearch 傳輸 協議和集群交互。集群中的節點通過端口 9300 彼此通信。如果這個端口沒有打開,節點將無法形成一個集群。
Java 客戶端作為節點必須和 Elasticsearch 有相同的 主要 版本;否則,它們之前將無法互相理解。
更多客戶端信息訪問
2.2、RESTful API with JSON over HTTP
所有其他語言可以使用 RESTful API 通過端口 9200 和 Elasticsearch 進行通信,你可以用你最喜愛的 web 客戶端訪問 Elasticsearch 。事實上,正如你所看到的,你甚至可以使用 curl 命令來和 Elasticsearch 交互。
三、Elasticsearch 面向文檔
Elasticsearch 是 面向文檔 的,意味著它存儲整個對象或 文檔_。Elasticsearch 不僅存儲文檔,而且 _索引每個文檔的內容使之可以被檢索。在 Elasticsearch 中,你 對文檔進行索引、檢索、排序和過濾--而不是對行列數據。這是一種完全不同的思考數據的方式,也是 Elasticsearch 能支持復雜全文檢索的原因。
3.1、內部json化
Elasticsearch 使用 JavaScript Object Notation 或者 JSON 作為文檔的序列化格式。JSON 序列化被大多數編程語言所支持,並且已經成為 NoSQL 領域的標準格式。 它簡單、簡潔、易於閱讀。
四、常用概念
4.1、near realtime【NRT】
Elasticsearch是一個接近實時的搜索平臺。這意味著從索引文檔的時間到可搜索的時間之間存在輕微的延遲(通常為一秒)。
4.2、Cluster集群
群集是一個或多個節點(服務器)的集合。集群由默認名稱為“elasticsearch”的唯一名稱標識。此名稱很重要,因為如果節點設置為通過名稱加入群集,則節點只能成為群集的一部分。
4.3、Node節點
節點是屬於集群一部分的單個服務器,存儲數據並參與集群的索引和搜索功能。
4.4、Index索引【相當於關系DB中的數據庫】
索引是一些具有相似特征的文檔集合。例如,您可以擁有客戶數據的索引,產品目錄的另一個索引以及訂單數據的另一個索引。索引由名稱(必須全部為小寫)標識,並且此名稱用於在對其中的文檔執行索引,搜索,更新和刪除操作時引用索引。
在單個群集中,您可以根據需要定義多個索引。
4.5、Type類型【相當於關系DB中的數據表】
在索引內,您可以定義一個或多個類型。類型是您的索引的邏輯類別/分區,其語義完全取決於您。通常,為具有一組公共字段的文檔定義類型。
4。6、Document文檔【相當於關系DB中的數據行】
文檔是可被索引的基本信息單位。例如,您可以為單個客戶提供文檔,為單個產品提供另一個文檔,為單個訂單提供另一個文檔。文檔以JSON(JavaScript Object Notation)表示。
在索引/類型中,您可以根據需要存儲任意數量的文檔。請註意,盡管文檔實際上駐留在索引中,但實際上文檔必須被索引/分配給索引內的類型。
4.7、分片和副本
參看地址:查看
007-elasticsearch【一】概述、Elasticsearch 訪問方式、Elasticsearch 面向文檔、常用概念