ElasticSearch入门
一、全文檢索基礎
將非結構化數據中的一部分信息提取出來,重新組織,使其變得有一定結構,然后對此有一定結構的數 據進行搜索,從而達到搜索相對較快的目的。這部分從非結構化數據中提取出的然后重新組織的信息, 我們稱之索引。 例如:字典。字典的拼音表和部首檢字表就相當于字典的索引,對每一個字的解釋是非結構化的,如果 字典沒有音節表和部首檢字表,在茫茫辭海中找一個字只能順序掃描。然而字的某些信息可以提取出來 進行結構化處理,比如讀音,就比較結構化,分聲母和韻母,分別只有幾種可以一一列舉,于是將讀音 拿出來按一定的順序排列,每一項讀音都指向此字的詳細解釋的頁數。我們搜索時按結構化的拼音搜到 讀音,然后按其指向的頁數,便可找到我們的非結構化數據——也即對字的解釋。 這種先建立索引,再對索引進行搜索的過程就叫全文檢索(Full-text Search)。 雖然創建索引的過程也是非常耗時的,但是索引一旦創建就可以多次使用,全文檢索主要處理的是查 詢,所以耗時間創建索引是值得的。
二、ElasticSearch簡介
2.1 什么是ElasticSearch
Elaticsearch,簡稱為es, es是一個開源的高擴展的分布式全文檢索引擎,它可以近乎實時的存儲、檢 索數據;本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的數據。es也使用Java開發并使用 Lucene作為其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏 Lucene的復雜性,從而讓全文搜索變得簡單。
2.2 ElasticSearch的使用案例
2.3 ElasticSearch對比Solr
三、ElasticSearch相關概念(術語)
3.1 概述
Elasticsearch是面向文檔(document oriented)的,這意味著它可以存儲整個對象或文檔(document)。 然而它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。在Elasticsearch中,你可以對 文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。Elasticsearch比傳統關系型數據庫如下:
Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields3.2 Elasticsearch核心概念
3.2.1 索引 index
一個索引就是一個擁有幾分相似特征的文檔的集合。比如說,你可以有一個客戶數據的索引,另一個產 品目錄的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必須全部是小寫字母的),并 且當我們要對對應于這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在 一個集群中,可以定義任意多的索引。
3.2.2 類型 type
在一個索引中,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區,其語義 完全由你來定。通常,會為具有一組共同字段的文檔定義一個類型。比如說,我們假設你運營一個博客 平臺并且將你所有的數據存儲到一個索引中。在這個索引中,你可以為用戶數據定義一個類型,為博客 數據定義另一個類型,當然,也可以為評論數據定義另一個類型。
3.2.3 字段Field
相當于是數據表的字段,對文檔數據根據不同屬性進行的分類標識
3.2.4 映射 mapping
mapping是處理數據的方式和規則方面做一些限制,如某個字段的數據類型、默認值、分析器、是否被 索引等等,這些都是映射里面可以設置的,其它就是處理es里面數據的一些使用規則設置也叫做映射, 按著最優規則處理數據對性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能對性能 更好。
3.2.5 文檔 document
一個文檔是一個可被索引的基礎信息單元。比如,你可以擁有某一個客戶的文檔,某一個產品的一個文 檔,當然,也可以擁有某個訂單的一個文檔。文檔以JSON(Javascript Object Notation)格式來表 示,而JSON是一個到處存在的互聯網數據交互格式。 在一個index/type里面,你可以存儲任意多的文檔。注意,盡管一個文檔,物理上存在于一個索引之 中,文檔必須被索引/賦予一個索引的type。
3.2.6 接近實時
NRT Elasticsearch是一個接近實時的搜索平臺。這意味著,從索引一個文檔直到這個文檔能夠被搜索到有一 個輕微的延遲(通常是1秒以內)
3.2.7 集群 cluster
一個集群就是由一個或多個節點組織在一起,它們共同持有整個的數據,并一起提供索引和搜索功能。 一個集群由一個唯一的名字標識,這個名字默認就是“elasticsearch”。這個名字是重要的,因為一個節 點只能通過指定某個集群的名字,來加入這個集群
3.2.8 節點 node
Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields 一個節點是集群中的一個服務器,作為集群的一部分,它存儲數據,參與集群的索引和搜索功能。和集 群類似,一個節點也是由一個名字來標識的,默認情況下,這個名字是一個隨機的漫威漫畫角色的名 字,這個名字會在啟動的時候賦予節點。這個名字對于管理工作來說挺重要的,因為在這個管理過程 中,你會去確定網絡中的哪些服務器對應于Elasticsearch集群中的哪些節點。 一個節點可以通過配置集群名稱的方式來加入一個指定的集群。默認情況下,每個節點都會被安排加入 到一個叫做“elasticsearch”的集群中,這意味著,如果你在你的網絡中啟動了若干個節點,并假定它們 能夠相互發現彼此,它們將會自動地形成并加入到一個叫做“elasticsearch”的集群中。 在一個集群里,只要你想,可以擁有任意多個節點。而且,如果當前你的網絡中沒有運行任何 Elasticsearch節點,這時啟動一個節點,會默認創建并加入一個叫做“elasticsearch”的集群。
總結
以上是生活随笔為你收集整理的ElasticSearch入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32WL芯片解锁方法
- 下一篇: 浅谈数字媒体艺术中的技术应用-1-技术概