Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库——无论是开源还是私有,但它也仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理,因为Lucene 非常复杂。 为了解决Lucene使用时的繁复性,于是Elasticsearch便应运而生。它使用 Java 编写,内部采用 Lucene 做索引与搜索,但是它的目标是使全文检索变得更简单,简单来说,就是对Lucene 做了一层封装,它提供了一套简单一致的 RESTful API 来帮助我们实现存储和检索。 当然,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确地形容:
一个分布式的实时文档存储,每个字段可以被索引与搜索;一个分布式实时分析搜索引擎;能胜任上百个服务节点的扩展,并支持 PB级别的结构化或者非结构化数据。由于Elasticsearch的功能强大和使用简单,维基百科、卫报、Stack Overflow、GitHub等都纷纷采用它来做搜索。现在,Elasticsearch已成为全文搜索领域的主流软件之一。 下面将介绍Elasticsearch的安装与简单使用。
你可以从 elastic 的官网 elastic.co/downloads/elasticsearch 获取最新版本的Elasticsearch。解压文档后,进入文件夹的bin目录下,点击elasticsearch.bat运行elasticsearch。 在浏览器输入http://127.0.0.1:9200/,如果显示 说明elasticsearch运行成功。
接下来是对Elasticsearch的基本使用,具体可以参照Elasticsearch中文文档 此处不做赘述。
首先创建一个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()); }