springboot集成Elasticsearch

    技术2026-08-18  15

    什么是Elasticsearch?

    Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。   Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库——无论是开源还是私有,但它也仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理,因为Lucene 非常复杂。   为了解决Lucene使用时的繁复性,于是Elasticsearch便应运而生。它使用 Java 编写,内部采用 Lucene 做索引与搜索,但是它的目标是使全文检索变得更简单,简单来说,就是对Lucene 做了一层封装,它提供了一套简单一致的 RESTful API 来帮助我们实现存储和检索。   当然,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确地形容:

    一个分布式的实时文档存储,每个字段可以被索引与搜索;一个分布式实时分析搜索引擎;能胜任上百个服务节点的扩展,并支持 PB级别的结构化或者非结构化数据。

    由于Elasticsearch的功能强大和使用简单,维基百科、卫报、Stack Overflow、GitHub等都纷纷采用它来做搜索。现在,Elasticsearch已成为全文搜索领域的主流软件之一。   下面将介绍Elasticsearch的安装与简单使用。

    安装并运行Elasticsearch

    你可以从 elastic 的官网 elastic.co/downloads/elasticsearch 获取最新版本的Elasticsearch。解压文档后,进入文件夹的bin目录下,点击elasticsearch.bat运行elasticsearch。 在浏览器输入http://127.0.0.1:9200/,如果显示 说明elasticsearch运行成功。

    使用Elasticsearch

    接下来是对Elasticsearch的基本使用,具体可以参照Elasticsearch中文文档 此处不做赘述。

    springboot集成Elaticsearch

    首先创建一个springboot项目,pom文件中添加依赖

    <!-- elasticsearch --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <!--<version>2.1.1.RELAESE</version>--> </dependency>

    创建实体类,添加Document注解

    @Data @Table(name = "user_info", schema = "pangting") @Document(indexName = "user",type = "man") public class UserInfoEntity extends BaseEntity { String userName; Integer age; Double height = 1.88; }

    创建测试用例,具体使用有待添加

    @Test public void test() { System.out.println("开始创建索引"); elasticsearchTemplate.createIndex(UserInfoEntity.class); UserInfoEntity userInfoEntity = new UserInfoEntity(); userInfoEntity.setId("helloworld"); userInfoEntity.setUserName("小明"); userInfoEntity.setHeight(1.88); userInfoEntity.setAge(22); IndexQuery indexQuery = new IndexQueryBuilder().withId(userInfoEntity.getId()).withObject(userInfoEntity).build(); String index = elasticsearchTemplate.index(indexQuery); SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(QueryBuilders.queryStringQuery("明")) .withPageable(new PageRequest(0, 20)) .build(); List<UserInfoEntity> list = elasticsearchTemplate.queryForList(searchQuery, UserInfoEntity.class); System.out.println(list.toString()); }
    Processed: 0.013, SQL: 9