ElasticSearch的安装以及与springboot的集成

ElasticSearch的安装以及与springboot的集成

前言:

elasticseach简称es,现在用得非常广泛,像百度等一些知名互联网公司都有用到es。那么es到底是什么呢?如何使用呢?下面就一起来学习一下。

一、es简介

es是一个高度可扩展的开源全文搜索和分析引擎,可以快速的、近实时地对大数据进行存储、搜索和分析,用来支撑复杂的数据搜索需求和企业级应用。简单来说,它是一个搜索引擎,可以实现全文搜索,功能类似于lucene和solr。

二、es的安装:

官方网站自行下载:https://www.elastic.co/downloads/elasticsearch
安装很简单,只需解压即可。解压后进入bin目录,运行里面的elasticsearch.bat,即可运行es。

elasticsearch弹簧数据弹性搜索对Springboot与Elasticsearch有要求,可参考https://github.com/spring-projects/spring-data-elasticsearch,我的Springboot是2.1.2,下载的Elasticsearch-6.2.2,你可以根据自己的情况下载。


另外,我在Elasticsearch-6.2.2运行elasticsearch.bat时候出现一个问题\ Java \ jdk1.8.0_151 \ bin \ java.exe“-cp”C:……………

解决:如果你的java安装在C:\ Program Files(x86)下,那么在下面设置JAVA_HOME
设置JAVA_HOME = C:\ Progra~2 \ Java \ jre1.8.0_131
如果你的java安装在C:\ Program Files下,那么设置JAVA_HOME就像下面
设置JAVA_HOME = C:\ Progra~1 \ Java \ jre1.8.0_131
解决问题的链接:https://discuss.elastic.co/t/unable-to-start-elasticsearch-6-2-0-in-windows-10/118851/5

三、springboot集成es:

项目依赖:

    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--data-elasticsearch-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

以上是整个项目用到的依赖,也就是说,集成es只需要data-elasticsearch和jna依赖。

实体Blog

/**
 * Create bySeptember
 * 2019/2/11
 * 16:34
 */
@Document(indexName = "blog",type = "blog")  //文档
public class Blog implements Serializable {

    private static final long serialVersionUID = 299997038365626833L;
    @Id
    private String id; // 主键
    private String title;
    private String summary;
    private String content;

    protected Blog() { //JPA规范要求
    }

    public Blog(String title, String summary, String content) {
        this.title = title;
        this.summary = summary;
        this.content = content;
    }
     //省略get/set
    @Override
    public String toString() {
        return "Blog{" +
                "id='" + id + '\'' +
                ", title='" + title + '\'' +
                ", summary='" + summary + '\'' +
                ", content='" + content + '\'' +
                '}';
    }
}

仓库repository

/**
 * Create bySeptember
 * 2019/2/11
 * 16:35
 */
//Blog 存储库
public interface BlogRepository extends ElasticsearchRepository<Blog,String> {
    Page<Blog>  findDistinctBlogByTitleContainingOrSummaryContainingOrContentContaining(String title, String summary,String content, Pageable pageable);
}

这里就定义了一个方法,方法名很长,它和jpa一样,按照规则定义方法就不用自己去实现。这个方法就是分页查找包含指定title或summary或content的内容。

junit测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class BlogRepositoryTest {
    @Autowired
    private BlogRepository blogRepository;

    @Before
    public void initRepository(){
        //清除所有数据
        blogRepository.deleteAll();
        //存入数据
        blogRepository.save(new Blog("登鹳雀楼","王之涣的诗",
                "白日依山尽,黄河入海流。欲穷千里目,更上一层楼。"));
        blogRepository.save(new Blog("相思","王维的诗",
                "红豆生南国,春来发几枝。愿君多采撷,此物最相思。"));
        blogRepository.save(new Blog("静夜思","李白的诗",
                "床前明月光,疑是地上霜。举头望明月,低头思故乡。"));
    }
    @Test
    public void testfindDistinctBlogByTitleContainingOrSummaryContainingOrContentContaining(){

        Pageable pageable = new PageRequest(0, 20);
        String title = "思";
        String summary = "相思";
        String content = "相思";
        Page<Blog> page = blogRepository.findDistinctBlogByTitleContainingOrSummaryContainingOrContentContaining(title, summary,content, pageable);
        assertThat(page.getTotalElements()).isEqualTo(2);
        for (Blog blog: page.getContent()){
            System.out.println(blog.toString());
        }
    }
}

这个测试类先往es中添加了三首唐诗作为数据,然后调用repository中的方法,查找title中含有“思”字或者summary中含有“相思”或者content中含有“相思”的内容。理论上应该返回除了登鹳雀楼以外的两条数据。测试结果passed

Blog{id='zHtj4GgBRi0EnhF9tlGJ', title='静夜思', summary='李白的诗', content='床前明月光,疑是地上霜。举头望明月,低头思故乡。'}
Blog{id='y3tj4GgBRi0EnhF9tlEE', title='相思', summary='王维的诗', content='红豆生南国,春来发几枝。愿君多采撷,此物最相思。'}

总结:

本文提供的es的安装是在Windows上安装,Linux和mac可能会有不同。至于springboot集成es,主要就是添加两个依赖,然后repository继承ElasticsearchRepository即可。ElasticsearchRepository接口封装了一些操作es的方法,我们直接调用就行,或者根据命名规则定义的方法,也不用自己实现,就类似于springData Jpa。

猜你喜欢

转载自blog.csdn.net/qq_37745470/article/details/87090547
今日推荐