什么是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());
}