环境:springboot2.3.10.RELEASE + ElasticSearch7.8.0
相关依赖及应用配置
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-elasticsearchartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
spring:
elasticsearch:
rest:
uris:
http://localhost:9201
---
logging:
level:
debug :
debug :
数据模型建立
true, indexName = "products", shards = 3, replicas = 1) (createIndex =
public class Product {
private Long id ;
"ik_max_word", type = FieldType.Text) (analyzer =
private String title ;
type= FieldType.Keyword) (
private String category ;
type = FieldType.Double) (
private Double price ;
type = FieldType.Keyword, index = false) (
private String images ;
public String toString() {
return "Product [id=" + id + ", title=" + title + ", category=" + category + ", price=" + price + ", images="
+ images + "]";
}
}
ProductRepository
这里我们只需要继承ElasticsearchRepository即可,是不是和data-jpa一样一样的的。
public interface ProductRepository extends ElasticsearchRepository<Product, Long> {
}
继承ElasticsearchRepository后 我们也可以像data-jpa一样使用findBy*等语法来写相关查询方法。
- 方法名中支持的关键字
- 方法返回值类型
- List
- Stream
- SearchHits
- List>
- Stream>
- SearchPage
Repository中也支持@Query注解的方式自定义查询字符串。
public interface ProductRepository extends ElasticsearchRepository {
List findByTitle(String title) ;
"{"fuzzy": {"title": "?0"}}") (
Page findByTitle(String sex,Pageable pageable);
// 自定义查询
"{"match": {"category": "?0"}}") (
Page findByCategory(String category,Pageable pageable);
// 高亮设置
"title"), (name = "category")}) (fields = { (name =
List> findByTitleOrCategory(String title, String category,Pageable pageable) ;
}
除了使用Repository方式,我们还可以使用ElasticsearchRestTemplate的方式请求服务。如下测试
测试
private ProductRepository productRepository ;
private ElasticsearchRestTemplate elasticTemplate ;
public void testCreate() {
Product product = new Product() ;
product.setId(3L) ;
product.setCategory("配件") ;
product.setPrice(299.5d) ;
product.setImages("http://www.pack.com/memory.jpg") ;
product.setTitle("很牛逼的内存条") ;
productRepository.save(product) ;
}
public void testQuery() {
Product product = productRepository.findById(1L).orElse(null) ;
System.out.println(product) ;
}
public void testFindAll() {
Pageable pageable = PageRequest.of(1, 2) ;
Page page = productRepository.findAll(pageable) ;
System.out.println(page.getTotalPages() + "n" + page.getContent()) ;
}
public void testTermSearch() {
for (Product p : productRepository.findByTitle("Java从入门到精通")) {
System.out.println(p) ;
}
}
public void testFindByTitle() {
Pageable pageable = PageRequest.of(0, 2) ;
Page page = productRepository.findByTitle("Java", pageable) ;
System.out.println(page.getTotalPages() + "n" + page.getContent()) ;
}
public void testFindByCategory() {
Pageable pageable = PageRequest.of(0, 2) ;
Page page = productRepository.findByCategory("书籍", pageable) ;
System.out.println(page.getTotalPages() + "n" + page.getContent()) ;
}
public void testCriteriaQuery() {
Criteria criteria = new Criteria("price").greaterThan(50).lessThan(80);
Query query = new CriteriaQuery(criteria);
SearchHits hits = elasticTemplate.search(query, Product.class, IndexCoordinates.of("products")) ;
for (SearchHit hit : hits) {
System.out.println(hit) ;
}
}
public void testStringQuery() {
Query query = new StringQuery("{ "match": { "category": { "query": "配件" } } } ");
SearchHits hits = elasticTemplate.search(query, Product.class);
for (SearchHit hit : hits) {
System.out.println(hit) ;
}
}
public void testStringQueryFuzzy() {
Query query = new StringQuery("{ "fuzzy":{"title":{"value":"Java"}} }");
HighlightQuery highlightQuery = null ;
HighlightBuilder highBuilder = new HighlightBuilder().preTags("").postTags("").field("title") ;
highlightQuery = new HighlightQuery(highBuilder) ;
query.setHighlightQuery(highlightQuery) ;
SearchHits hits = elasticTemplate.search(query, Product.class);
for (SearchHit hit : hits) {
System.out.println(hit + "n" + hit.getHighlightField("title")) ;
}
}
在启动服务时会自动地为我们创建索引。
我们可以安装Chrome插件 ElasticSearch Head非常方便地查看es的状态及索引信息。
这里我是搭建的集群。
阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=15487,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=15487,转载请注明出处。
评论0