什么是ES?
Elasticsearch(简称为ES)是一个开源的分布式搜刮引擎,用于全文搜刮、实时分析和可视化。它建立在Apache Lucene搜刮引擎库的根本上,提供了RESTful API,支持分布式架构和程度扩展,特别实用于处置惩罚大规模的非结构化或半结构化数据。
Elasticsearch与传统数据库查询的区别:
- 搜刮引擎特性: Elasticsearch是一个搜刮引擎,其重要计划目标是支持高效的全文搜刮和实时分析。它专注于处置惩罚大量文本数据,支持复杂的全文搜刮查询,例如模糊搜刮、词组匹配、范围查询等。传统数据库重要面向结构化数据,更实用于关系型查询。
- 分布式和程度扩展: Elasticsearch是分布式的,它可以在多个节点上运行,并可以大概程度扩展以处置惩罚大规模数据。传统数据库通常在单个节点上运行,并且通常需要垂直扩展(增长服务器性能)来处置惩罚更大的负载。
- Schema-less(无模式): Elasticsearch是无模式的,意味着你不需要在索引中预界说数据结构。你可以直接插入数据,Elasticsearch会根据数据主动推断其类型。传统数据库需要在创建表时界说模式。
- 实时性: Elasticsearch提供实时索引和搜刮功能,数据险些立即可用于搜刮。传统数据库的实时性大概受到数据复制和索引的影响。
- 多语言支持: Elasticsearch支持多种查询语言,例如查询字符串、DSL(Domain Specific Language)等,使其更易于使用和集成。传统数据库通常使用SQL。
要在Spring Boot项目中集成Elasticsearch,首先需要添加相应的依靠,然后配置Elasticsearch的连接信息,末了通过Spring Data Elasticsearch或者Elasticsearch的Java REST客户端来与Elasticsearch举行交互。
SpringBoot整合ElasticSearch的步调:
0.代码层级结构
1. 添加依靠
在pom.xml中添加Spring Data Elasticsearch依靠:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
- </dependency>
复制代码 2. 配置Elasticsearch连接信息
在application.properties或(application.yml)中配置Elasticsearch连接信息,如下:
- spring.elasticsearch.uris=http://localhost:9200
复制代码- spring:
- elasticsearch:
- uris: http://localhost:9200
复制代码 如果Elasticsearch没有设置用户名和暗码,这大概就足够了。如果需要认证,可以使用以下配置:
- spring.elasticsearch.username=your_username
- spring.elasticsearch.password=your_password
复制代码- spring:
- elasticsearch:
- uris: http://localhost:9200
- username:your_username password:your_password
复制代码 3. 创建实体类
创建一个简朴的实体类,使用@Document注解指定索引和类型:
- import lombok.Data;
- import org.springframework.data.annotation.Id;
- import org.springframework.data.elasticsearch.annotations.Document;
- /**
- * @Document(indexName = "user-demo") 索引名称为user-demo
- * */
- @Data
- @Document(indexName = "user-demo")
- public class User {
- @Id
- private String id;
- private String username;
- private String address;
- private Integer age;
- private String gender;
- }
复制代码 4. 使用Spring Data Elasticsearch举行操作
创建一个UserMapper接口,继承自ElasticsearchRepository:
- import com.example.demoes.entity.User;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
- import org.springframework.stereotype.Repository;
- import java.util.List;
- /**
- * 这些方法的名称遵循一种命名约定,这种约定将方法名中的关键词(如 findBy、Like、IgnoreCase 等)与实体类(User)的属性名相关联。
- * 这样,Spring Data Elasticsearch 可以根据方法名自动生成相应的查询。
- *
- * 在Spring Data Elasticsearch中,查询方法的命名约定依赖于一些关键词和命名规范,这些关键词用于描述要执行的查询操作。以下是一些常见的关键词和它们的含义:
- *
- * findBy:指定查询的条件的前缀,后面通常跟随实体类的属性名。例如,findByUsername 表示要根据用户名进行查询。
- *
- * Like:用于模糊查询,通常与属性名一起使用。例如,findByUsernameLike 表示要进行用户名的模糊查询。
- *
- * IgnoreCase:用于不区分大小写的查询,通常与属性名一起使用。例如,findByUsernameIgnoreCase 表示不区分大小写地查询用户名。
- *
- * Containing:用于包含查询,通常与属性名一起使用。例如,findByUsernameContaining 表示包含指定内容的查询。
- *
- * And 和 Or:用于构建复合查询条件。例如,findByUsernameAndAge 表示根据用户名和年龄进行查询。
- *
- * OrderBy:用于指定结果的排序方式。例如,findByAgeOrderByUsernameDesc 表示根据年龄查询并按用户名降序排序。
- *
- * Page 和 Iterable:用于指定查询结果的返回类型。例如,Page<User> 表示返回分页结果,Iterable<User> 表示返回一个列表。
- *
- * 其他属性名:您可以根据实体类的属性名来定义查询条件。例如,如果实体类有一个属性为 email,您可以编写 findByEmail 方法来根据邮箱进行查询。
- * */
- @Repository
- public interface UserMapper extends ElasticsearchRepository<User,String> {
- /**
- *自定义查询
- * */
- List<User> findByAddressLikeIgnoreCaseOrderByAgeDesc(String address);
- Page<User> findByUsernameContaining(String username, Pageable page);
- User findByAge(Integer age);
- List<User> findByGender(String gender);
- long count();
- Boolean existsById();
- }
复制代码 5.测试
在测试中使用Spring Boot的@SpringBootTest注解,来验证Elasticsearch是否正常工作。
以上步调是一个简朴的Spring Boot集成Elasticsearch的示例。你可以根据你的实际需求举行更复杂的配置和操作。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |