SpringBoot日記——ElasticSearch全文檢索

  看到標題的那一串英文,對於新手來講必定比較陌生,而提及檢索,應該都知道吧。html

  這個ElasticSearch目前咱們的首選,他主要有能夠提供快速的存儲、搜索、分析海量數據的做用。他是一個分佈式搜索服務,提供了Restful API,底層基於Lucene(一個開源的搜索引擎工具包),使用shard的分片方式保證數據安全,且有自動resharding功能。咱們知道的github、維基百科等這類網站,都是採用這個服務的。node

elasticsearch的安裝

  這裏在使用前還要說明一點,很重要的:elasticsearch默認佔用2G的堆內存空間,通常直接啓用的話,必定會報錯,因此咱們還要作相應的處理才能夠。git

  1)、首先是使用docker拉取該容器github

docker pull elasticsearch
// 若拉取較慢,可使用國內的docker加速
docker pull registry.docker-cn.com/library/elasticsearch

  2)、啓動鏡像(限制內存佔用的啓動,9200是該引擎經常使用端口,9300是做爲分佈式使用時,各個節點的通訊端口)spring

docker run -e ES_JAVA_OPTS="-Xms256m -Xms256m" -d -p 9200:9200 -p 9300:9300 --name ES_01 73e6fdf8bd4f

  3)、檢查一下,是否啓動成功了,瀏覽器中鍵入 你服務器的ip:9200,打開之後是這樣的,表示成功了~:(不要在乎這個炫酷的json格式,是瀏覽器插件~)docker

  

elasticsearch的測試

  1)、首先咱們來看下官方文檔(放心,中文的!):https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.htmljson

  這裏有最簡單實用的安裝和使用方法。咱們先打開一個簡單的示例,試一下:瀏覽器

  按照這份文檔,咱們使用postman或jmeter等接口的工具來測試一下吧:安全

  按照文檔,咱們使用put參數,地址格式: 服務器ip:9200/索引名稱/類型名稱/文件id  。可見建立成功了,返回了true。
  將 HTTP 命令由 PUT 改成 GET 能夠用來檢索文檔,一樣的,可使用 DELETE 命令來刪除文檔,以及使用 HEAD 指令來檢查文檔是否存在。若是想更新已存在的文檔,只需再次 PUT 。springboot

  整合到springboot中

  好的,咱們看看如何把這個整合到springboot中吧。(另外注意下:咱們的springboot的版本儘可能在2.0+,這樣你安裝的elasticsearch的版本才能匹配到,否則運行的時候會有連接報錯)

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

  SpringBoot默認支持兩種技術與ES進行交互:Jest和SpringData ElasticSearch,而默認Jest是不生效的,想要使用,就要本身加載jest的jar包了。本文不作相關介紹,後邊有需求,我能夠單獨補一篇文章。這裏主要來講一下SpringData ElasticSearch的使用。

  1)、首先咱們啓動主程序以前要添加一下的配置參數,而後直接啓動主程序,看看是否能夠正常運行。

spring.data.elasticsearch.cluster-name=elasticsearch  #這裏在瀏覽器中輸入 服務器id:9200 就能夠看到這個name是什麼了
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300  #這裏寫的是 服務器id:9300

  咱們看到啓動正常,而且add添加了這個9300的端口啓動信息。

  2)、接下來咱們按照官網文檔的兩種寫法,進行測試:

    1.編寫一個ElasticSearchRepository(有須要增刪改查的後邊本身補吧),一個須要用到的Book(注意註解的使用)。

import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "oooodin", 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() {
        return "Book{" +
                "id=" + id +
                ", bookName='" + bookName + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface BookRepository extends ElasticsearchRepository<Book, Integer> {
}

  而後來測試一下看看(建立一個測試類):

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

    @Autowired
    BookRepository bookRepository;

    @Test
    public void test01() {
        Book book = new Book();
        book.setId(1);
        book.setBookName("晉升");
        book.setAuthor("ice");
        bookRepository.index(book);
    }

}

  而後咱們經過瀏覽器訪問一下:

  服務器ip:9300 就能夠訪問看到咱們添加的內容了。

相關文章
相關標籤/搜索