最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot整合elasticsearch的詳細步驟

 更新時間:2019年04月02日 10:16:37   作者:程序員果果  
這篇文章主要介紹了Spring Boot整合elasticsearch的詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、簡介

我們的應(yīng)用經(jīng)常需要添加檢索功能,開源的 ElasticSearch 是目前全文搜索引擎的 首選。他可以快速的存儲、搜索和分析海量數(shù)據(jù)。Spring Boot通過整合Spring Data ElasticSearch為我們提供了非常便捷的檢索功能支持;

Elasticsearch是一個分布式搜索服務(wù),提供Restful API,底層基于Lucene,采用 多shard(分片)的方式保證數(shù)據(jù)安全,并且提供自動resharding的功能,github 等大型的站點也是采用了ElasticSearch作為其搜索服務(wù),

我們建立一個網(wǎng)站或應(yīng)用程序,并要添加搜索功能,但是想要完成搜索工作的創(chuàng)建是非常困難的。我們希望搜索解決方案要運行速度快,我們希望能有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP來索引數(shù)據(jù),我們希望我們的搜索服務(wù)器始終可用,我們希望能夠從一臺開始并擴展到數(shù)百臺,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個云的解決方案。因此我們利用Elasticsearch來解決所有這些問題及可能出現(xiàn)的更多其它問題。

二、安裝elasticsearch

我們采用 docker鏡像安裝的方式。

#下載鏡像
docker pull elasticsearch
#啟動鏡像,elasticsearch 啟動是會默認分配2G的內(nèi)存 ,我們啟動是設(shè)置小一點,防止我們內(nèi)存不夠啟動失敗
#9200是elasticsearch 默認的web通信接口,9300是分布式情況下,elasticsearch個節(jié)點通信的端口
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name es01 5c1e1ecfe33a

訪問 127.0.0.1:9200 如下圖,說明安裝成功

三、elasticsearch的一些概念

以 員工文檔 的形式存儲為例:一個文檔代表一個員工數(shù)據(jù)。存儲數(shù)據(jù)到 ElasticSearch 的行為叫做索引 ,但在索引一個文檔之前,需要確定將文檔存 儲在哪里。

一個 ElasticSearch 集群可以 包含多個索引 ,相應(yīng)的每個索引可以包含多個類型。這些不同的類型存儲著多個文檔 ,每個文檔又有 多個 屬性 。

類似關(guān)系:

  • 索引-數(shù)據(jù)庫
  • 類型-表
  • 文檔-表中的記錄 – 屬性-列

elasticsearch使用可以參早官方文檔,在這里不在講解。

四、整合 elasticsearch

創(chuàng)建項目 springboot-elasticsearch,引入web支持

SpringBoot 提供了兩種方式操作elasticsearch,Jest 和 SpringData。

Jest 操作 elasticsearch

Jest是ElasticSearch的Java HTTP Rest客戶端。

ElasticSearch已經(jīng)有一個Java API,ElasticSearch也在內(nèi)部使用它,但是Jest填補了空白,它是ElasticSearch Http Rest接口缺少的客戶端。

1. pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.gf</groupId>
  <artifactId>springboot-elasticsearch</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>springboot-elasticsearch</name>
  <description>Demo project for Spring Boot</description>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  </dependency>
    <dependency>
      <groupId>io.searchbox</groupId>
      <artifactId>jest</artifactId>
      <version>5.3.3</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

2. application.properties

spring.elasticsearch.jest.uris=http://127.0.0.1:9200

3. Article

package com.gf.entity;
import io.searchbox.annotations.JestId;
public class Article {

  @JestId
  private Integer id;
  private String author;
  private String title;
  private String content;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getAuthor() {
    return author;
  }

  public void setAuthor(String author) {
    this.author = author;
  }

  public String getTitle() {
    return title;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }

  @Override
  public String toString() {
    final StringBuilder sb = new StringBuilder( "{\"Article\":{" );
    sb.append( "\"id\":" )
        .append( id );
    sb.append( ",\"author\":\"" )
        .append( author ).append( '\"' );
    sb.append( ",\"title\":\"" )
        .append( title ).append( '\"' );
    sb.append( ",\"content\":\"" )
        .append( content ).append( '\"' );
    sb.append( "}}" );
    return sb.toString();
  }
}

4. springboot測試類

package com.gf;

import com.gf.entity.Article;
import io.searchbox.client.JestClient;
import io.searchbox.core.Index;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootElasticsearchApplicationTests {

  @Autowired
  JestClient jestClient;

  @Test
  public void createIndex() {
    //1. 給ES中索引(保存)一個文檔
    Article article = new Article();
    article.setId( 1 );
    article.setTitle( "好消息" );
    article.setAuthor( "張三" );
    article.setContent( "Hello World" );

    //2. 構(gòu)建一個索引
    Index index = new Index.Builder( article ).index( "gf" ).type( "news" ).build();
    try {
      //3. 執(zhí)行
      jestClient.execute( index );
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  @Test
  public void search() {
    //查詢表達式
    String query = "{\n" +
        "  \"query\" : {\n" +
        "    \"match\" : {\n" +
        "      \"content\" : \"hello\"\n" +
        "    }\n" +
        "  }\n" +
        "}";

    //構(gòu)建搜索功能
    Search search = new Search.Builder( query ).addIndex( "gf" ).addType( "news" ).build();

    try {
      //執(zhí)行
      SearchResult result = jestClient.execute( search );
      System.out.println(result.getJsonString());
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Jest的更多api ,可以參照github的文檔:https://github.com/searchbox-io/Jest

SpringData 操作 elasticsearch

1. application.properties

spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

2. Book

package com.gf.entity;
@Document( indexName = "gf" , type = "book")
public class Book {
  private Integer id;
  private String bookName;
  private String author;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getBookName() {
    return bookName;
  }

  public void setBookName(String bookName) {
    this.bookName = bookName;
  }

  public String getAuthor() {
    return author;
  }

  public void setAuthor(String author) {
    this.author = author;
  }

  @Override
  public String toString() {
    final StringBuilder sb = new StringBuilder( "{\"Book\":{" );
    sb.append( "\"id\":" )
        .append( id );
    sb.append( ",\"bookName\":\"" )
        .append( bookName ).append( '\"' );
    sb.append( ",\"author\":\"" )
        .append( author ).append( '\"' );
    sb.append( "}}" );
    return sb.toString();
  }  
}

3. BookRepository

package com.gf.repository;
import com.gf.entity.Book;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

public interface BookRepository extends ElasticsearchRepository<Book, Integer>{

  List<Book> findByBookNameLike(String bookName);
}

4. springboot 測試類

package com.gf;
import com.gf.entity.Article;
import com.gf.entity.Book;
import com.gf.repository.BookRepository;
import io.searchbox.client.JestClient;
import io.searchbox.core.Index;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootElasticsearchApplicationTests {
  @Autowired
  BookRepository bookRepository;
  
  @Test
  public void createIndex2(){
    Book book = new Book();
    book.setId(1);
    book.setBookName("西游記");
    book.setAuthor( "吳承恩" );
    bookRepository.index( book );
  }

  @Test
  public void useFind() {
    List<Book> list = bookRepository.findByBookNameLike( "游" );
    for (Book book : list) {
      System.out.println(book);
    }
  }
}

我們啟動測試 ,發(fā)現(xiàn)報錯 。

這個報錯的原因是springData的版本與我elasticsearch的版本有沖突,下午是springData官方文檔給出的適配表。

我們使用的springdata elasticsearch的 版本是3.1.3 ,對應(yīng)的版本應(yīng)該是6.2.2版本,而我們是的 elasticsearch 是 5.6.9,所以目前我們需要更換elasticsearch的版本為6.X

docker pull elasticsearch:6.5.1
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name es02 鏡像ID

訪問127.0.0.1:9200

集群名為docker-cluster,所以我們要修改application.properties的配置了

spring.data.elasticsearch.cluster-name=docker-cluster
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

我們再次進行測試,測試可以通過了 。我們訪問http://127.0.0.1:9200/gf/book/1,可以得到我們存入的索引信息。

源碼:https://github.com/gf-huanchupk/SpringBootLearning

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Servlet實現(xiàn)統(tǒng)計頁面訪問次數(shù)功能

    Servlet實現(xiàn)統(tǒng)計頁面訪問次數(shù)功能

    這篇文章主要介紹了Servlet實現(xiàn)統(tǒng)計頁面訪問次數(shù)功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Java JDK 動態(tài)代理的使用方法示例

    Java JDK 動態(tài)代理的使用方法示例

    Java 動態(tài)代理機制以巧妙的方式近乎完美地實踐了代理模式的設(shè)計理念。下面這篇文章主要給大家分享了關(guān)于Java JDK 動態(tài)代理的使用方法示例,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • SpringBoot整合Mongodb實現(xiàn)增刪查改的方法

    SpringBoot整合Mongodb實現(xiàn)增刪查改的方法

    這篇文章主要介紹了SpringBoot整合Mongodb實現(xiàn)簡單的增刪查改,MongoDB是一個以分布式數(shù)據(jù)庫為核心的數(shù)據(jù)庫,因此高可用性、橫向擴展和地理分布是內(nèi)置的,并且易于使用。況且,MongoDB是免費的,開源的,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • Mybatis或Mybatis-Plus框架的xml文件中特殊符號的使用詳解

    Mybatis或Mybatis-Plus框架的xml文件中特殊符號的使用詳解

    這篇文章主要介紹了Mybatis或Mybatis-Plus框架的xml文件中特殊符號的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MyBatis類型處理器TypeHandler的作用及說明

    MyBatis類型處理器TypeHandler的作用及說明

    這篇文章主要介紹了MyBatis類型處理器TypeHandler的作用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java多線程學(xué)習(xí)之死鎖的模擬和避免(實例講解)

    java多線程學(xué)習(xí)之死鎖的模擬和避免(實例講解)

    下面小編就為大家?guī)硪黄猨ava多線程學(xué)習(xí)之死鎖的模擬和避免(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • java設(shè)計模式之實現(xiàn)對象池模式示例分享

    java設(shè)計模式之實現(xiàn)對象池模式示例分享

    對象池模式經(jīng)常用在頻繁創(chuàng)建、銷毀對象(并且對象創(chuàng)建、銷毀開銷很大)的場景,比如數(shù)據(jù)庫連接池、線程池、任務(wù)隊列池等。本代碼簡單,沒有限制對象池大小
    2014-02-02
  • 十大常見Java String問題_動力節(jié)點Java學(xué)院整理

    十大常見Java String問題_動力節(jié)點Java學(xué)院整理

    本文介紹Java中關(guān)于String最常見的10個問題,需要的朋友參考下吧
    2017-04-04
  • Spring boot 默認靜態(tài)資源路徑與手動配置訪問路徑的方法

    Spring boot 默認靜態(tài)資源路徑與手動配置訪問路徑的方法

    這篇文章主要介紹了Spring boot 默認靜態(tài)資源路徑與手動配置訪問路徑的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • springcloud使用consul作為配置中心

    springcloud使用consul作為配置中心

    這篇文章主要介紹了springcloud使用consul作為配置中心,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06

最新評論

万源市| 长丰县| 隆化县| 大厂| 广宗县| 靖远县| 越西县| 垦利县| 峨边| 濮阳市| 息烽县| 南和县| 吴川市| 东城区| 天等县| 莆田市| 阳西县| 舟曲县| 英吉沙县| 日照市| 中牟县| 上杭县| 闸北区| 馆陶县| 吴堡县| 泸西县| 津市市| 襄樊市| 建阳市| 昌平区| 区。| 东方市| 瓦房店市| 莫力| 乐平市| 韩城市| 临沂市| 丰台区| 马山县| 山阳县| 姜堰市|