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 就能够访问看到咱们添加的内容了。

相关文章
相关标签/搜索