java操作Elasticsearch(二):Repository文档操作(增删改查)

时间:2024-03-13 07:06:03

本文环境基于:https://blog.csdn.net/qq_41622603/article/details/109742902

Spring Data 的强大之处,就在于你不用写任何DAO处理,自动根据方法名或类的信息进行CRUD操作。只要你定义一个接口,然后继承Repository提供的一些子接口,就能具备各种基本的CRUD功能。

我们只需要定义接口,然后继承它就OK了。

一、创建接口继承ElasticsearchRepository

java操作Elasticsearch(二):Repository文档操作(增删改查)

二、给Item添加有参构造函数,和无参构造

截图没把无参构造加上去

java操作Elasticsearch(二):Repository文档操作(增删改查)

新增文档

java操作Elasticsearch(二):Repository文档操作(增删改查)

测试:执行GET /item/_search

java操作Elasticsearch(二):Repository文档操作(增删改查)

 

批量新增

java操作Elasticsearch(二):Repository文档操作(增删改查)

测试:执行GET /item/_search

java操作Elasticsearch(二):Repository文档操作(增删改查)

 

修改文档

修改和新增是同一个接口,区分的依据就是id

把新增的参数修改下,小米改为大米

java操作Elasticsearch(二):Repository文档操作(增删改查)

测试:执行GET /item/_search

java操作Elasticsearch(二):Repository文档操作(增删改查)

 

基本查询

(1)根据id查询

java操作Elasticsearch(二):Repository文档操作(增删改查)

(2)查询全部,这里就懒得把结果一个个打出来了,能查到就木有问题

java操作Elasticsearch(二):Repository文档操作(增删改查)

 

自定义查询

Spring Data 的另一个强大功能,是根据方法名称自动实现功能。

比如:你的方法名叫做:findByTitle,那么它就知道你是根据title查询,然后自动帮你完成,无需写实现类。

当然,方法名称要符合一定的约定:

Keyword 例子 Elasticsearch Query String
And findByNameAndPrice {"bool" : {"must" : [ {"field" : {"name" : "?"}}, {"field" : {"price" : "?"}} ]}}
Or findByNameOrPrice {"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"price" : "?"}} ]}}
Is findByName {"bool" : {"must" : {"field" : {"name" : "?"}}}}
Not findByNameNot {"bool" : {"must_not" : {"field" : {"name" : "?"}}}}
Between findByPriceBetween {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}
LessThanEqual findByPriceLessThan {"bool" : {"must" : {"range" : {"price" : {"from" : null,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}
GreaterThanEqual findByPriceGreaterThan {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : null,"include_lower" : true,"include_upper" : true}}}}}
Before findByPriceBefore {"bool" : {"must" : {"range" : {"price" : {"from" : null,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}
After findByPriceAfter {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : null,"include_lower" : true,"include_upper" : true}}}}}
Like findByNameLike {"bool" : {"must" : {"field" : {"name" : {"query" : "?*","analyze_wildcard" : true}}}}}
StartingWith findByNameStartingWith {"bool" : {"must" : {"field" : {"name" : {"query" : "?*","analyze_wildcard" : true}}}}}
EndingWith findByNameEndingWith {"bool" : {"must" : {"field" : {"name" : {"query" : "*?","analyze_wildcard" : true}}}}}
Contains/Containing findByNameContaining {"bool" : {"must" : {"field" : {"name" : {"query" : "**?**","analyze_wildcard" : true}}}}}
In findByNameIn(Collection<String>names) {"bool" : {"must" : {"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"name" : "?"}} ]}}}}
NotIn findByNameNotIn(Collection<String>names) {"bool" : {"must_not" : {"bool" : {"should" : {"field" : {"name" : "?"}}}}}}
Near findByStoreNear Not Supported Yet !
True findByAvailableTrue {"bool" : {"must" : {"field" : {"available" : true}}}}
False findByAvailableFalse {"bool" : {"must" : {"field" : {"available" : false}}}}
OrderBy findByAvailableTrueOrderByNameDesc {"sort" : [{ "name" : {"order" : "desc"} }],"bool" : {"must" : {"field" : {"available" : true}}}}

 

写个按价格查询的例子

在ItemRepository接口加入按价格查询的方法

java操作Elasticsearch(二):Repository文档操作(增删改查)

按价格查询

java操作Elasticsearch(二):Repository文档操作(增删改查)