Elasticsearch是一個基於Lucene的搜索服務器,Elasticsearch也是使用Java編寫的,它的內部使用Lucene作索引與搜索,可是它的目的是使用全文檢索變得簡單,經過隱藏Lucene的複雜性,取而代之的提供一套簡單一致的RESTful API。java
Elasticsearch 不單單是 Lucene,而且也不單單只是一個全文搜索引擎。 它能夠被下面這樣準確的形容:node
Elasticsearch是面向文檔,即文檔是能夠被索引的信息的基本單位,而文檔的格式是在NoSQL中經常使用的JSON,關於關係型數據庫和Elasticsearch之間一些名詞的關係的對應能夠用如下的表格來表示,方便咱們後面的應用:git
關係型數據庫 | Elasticsearch |
---|---|
Database | Index |
Table | Type |
Row | Document |
Column | Field |
Schema | Mapping |
這裏須要注意的是文檔的格式不是固定的,同一個Type下的不一樣文檔能夠擁有不一樣的格式github
豐富的查詢方式——Elasticsearch可以執行及合併多種類型的搜索(結構化數據、非結構化數據、地理位置、指標),搜索方式隨心而變。spring
極速的查詢速度——Elasticsearch經過有限狀態轉換器實現了用於全文檢索的倒排索引,實現了用於存儲數值數據和地理位置數據的 BKD 樹,以及用於分析的列存儲。每一個數據都被編入了索引。數據庫
可觀的可擴展性——Elasticsearch可以水平擴展,每秒鐘可處理海量事件,同時可以自動管理索引和查詢在集羣中的分佈方式,能夠在承載了 PB 級數據的成百上千臺服務器上運行。安全
強大的彈性保障——硬件故障。網絡分割。Elasticsearch 檢測這些故障並確保集羣(和數據)的安全性和可用性。經過跨集羣複製功能,輔助集羣能夠做爲熱備份隨時投入使用。bash
www.elastic.co/cn/download…服務器
這裏咱們選擇的是6.2.2版本的ES,由於我在spring-data-elasticsearch的github上看到最新版本的支持的ES是6.2.2網絡
其中3.2.x版本還沒有發佈正式版,因此這裏選擇了最新的3.1.8版本,下面咱們切換到安裝目錄的bin目錄下,啓動es:
./elasticsearch &
複製代碼
這裏添加 & 符號的做用是讓它在後臺運行。
看到這個就說明啓動成功了~
由於,在咱們平常的應用中,咱們用的比較多的都是中文的分詞,因此這裏咱們須要一箇中文的分詞器
首先前往github上下載與ES版本對應的zip包
而後在es的安裝目錄下的plugins下新建一個ik的目錄,將zip包解壓到該目錄下重啓es便可~
在es的啓動日誌中看到這個說明插件已經安裝並啓動成功! 到這裏,咱們的前期準備工做就已經結束了,下面的就是在Spring Boot項目中進行操做了~
咱們首先在pom.xml中添加spring-data-elasticsearch的依賴(敲黑板!!這裏的版本必定要去參考一下對應的ES的版本,否則就會引發版本兼容性問題而報錯!):
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.1.8.RELEASE</version>
</dependency>
複製代碼
依賴已經添加完畢,下面咱們就經過簡單的配置來完成CRUD
這裏的配置須要注意一個點,咱們訪問的9200是HTTP的端口號,而使用Java的時候須要配置成9300:
spring:
data:
elasticsearch:
cluster-name: my-applicatioon
cluster-nodes: 127.0.0.1:9300
複製代碼
在啓動日誌中,咱們能夠看到這一點:
而後咱們經過註解來完成一個index和mapping的建立(即對應關係型數據庫中的庫和表)
@Data
@Document(indexName = "test",type = "article")
public class Article implements Serializable {
private Long id;
@Field(type= FieldType.Text,analyzer = "ik_max_word")
private String title;
private String content;
}
複製代碼
@Filed
註解中的屬性能夠對分詞器進行配置analyzer = "ik_max_word"
,這樣就能夠在查詢標題的時候使咱們的中文分詞器了~
這樣,咱們就建立了一個index(database)名爲test,並新建一個type(table)名爲article。
下面,咱們若是想要完成CRUD,只須要建立一個接口去繼承ElasticsearchRepository
便可,以下:
public interface ESDao extends ElasticsearchRepository<Article,Long> {
}
複製代碼
而後,咱們就能夠在咱們項目這樣去用了~
和JPA同樣方便,咱們這時就能夠把ES當作MySQL去操做便可~
項目中用到的對應版本的包我已經上傳到了百度網盤,關注公衆號回覆「ES」便可獲取。 完整的Demo代碼我已經上傳到了github,歡迎fork star pr
原創不易,謝謝支持!