ElasticSearch
- ElasticSearch是开源的全文搜索引擎,可以快速的存储,搜索,分析海量数据.SpringBoot通过整合Spring Data ElasticSearch提供检索功能支持
- ElasticSearch是分布式搜索服务,提供RESTful API,底层基于Lucene,采用多shard(分片) 的方式保证数据安全,并且提供 自动resharding的功能
ElasticSearch使用
- 参照ElasticSearch使用文档
- 示例
对于员工目录,我们将做如下操作:
1.每个员工索引一个文档,文档包含该员工的所有信息。
2.每个文档都将是 employee 类型 。
3.该类型位于 索引 megacorp 内。
4.该索引保存在我们的 Elasticsearch 集群中。
代码语言:javascript复制PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
- 路径 /megacorp/employee/1 包含了三部分的信息:
- megacorp:索引名称
- employee:类型名称
- 1:特定雇员的ID
整合ElasticSearch
- 引入spring-boot-starter-data-elasticsearch
<!--SpringBoot默认使用SpringData ElasticSearch模块进行操作-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
安装Spring Data对应版本的ElasticSearch
application.yml配置
SpringBoot自动配置的ElasticsearchRepository,ElasticsearchTemplate,Client
SpringBoot默认支持两种技术和ElasticSearch进行交互:
Jest:
- 默认不生效
- 使用时需要导入Jest工具包:import io.searchbox.client.JestClient;
1.给Elasticsearch索引一个文档
2.构建索引功能
index.Builder(article).index("indexName").type("news").build();
3.搜索
search.Builder(json).addIndex("indexName").addType("news").build();
.执行
jetClient.excute()
SpringData ElasticSearch: SpringData ElasticSearch使用
- Client: 需要配置节点信息:clusterNodes,clusterName
- ElasticsearchTemplate: 操作Elasticsearch
- 编写ElasticsearchRepository的接口继承操作方法操作Elasticsearch
1.在application.properties中配置clusterNodes,clusterName(版本适配)
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.cluster-name=elasticsearch
2.两种用法:ElasticsearchTemplate,ElasticsearchRepository
2.1
2.2 ElasticsearchRepository
实体类注解@Document(indexName="indexName",type="book")
构建索引:bookRespository.index(book);
ElasticsearchRepository方法:S save(S var1);
Iterable<S> saveAll(Iterable<S> var1);
Optional<T> findById(ID var1);
boolean existsById(ID var1);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> var1);
long count();
void deleteById(ID var1);
void delete(T var1);
void deleteAll(Iterable<? extends T> var1);
void deleteAll();
查询表达式注解@Query()