- 1 前言
- 2 项目元数据
- 3 使用条件
- 4 玩转Spring Data Repositories
- 4.1 核心概念
- 4.2 查询方法
- 4.3 repository接口定义
- 4.3.1 调整repository定义
- 4.4 定义查询方法
- 4.4.1 查询策略
- 4.4.2 创建查询
- 4.4.3 属性表达式
- 4.4.4 处理特殊参数
- 4.4.5 限定查询结果集大小
- 4.4.6 Stream处理查询结果
- 4.4.7 异步处理查询结果
- 4.5 创建repository实例
- 4.5.1 XML配置
- 4.5.2 JavaConfig
- 4.5.3 独立使用
- 4.6 自定义repository实现
- 4.6.1 为单一的repositories添加自定义方法
- 4.6.2 为所有的repositories添加自定义方法
- 4.7 扩展Spring Data
- 4.7.1 WEB支持
- 4.7.2 Repository填充
- 5 Elasticsearch Repositories
- 5.1.1 Spring命名空间
- 5.1.2 基于注解的配置
- 5.1.3 使用CDI
- 5.2.1 查询策略
- 5.2.2 创建查询
- 5.2.3 使用@Query注解
- 5.3 其他Elasticsearch操作的支持
- 5.3.1 构建Filter
- 5.3.2 利用Scan和Scroll处理大结果集
- 6.1 附录A 命名空间参考文档
- 6.2 附录B Populators命名空间参考文档
- 6.3 附录C Repository查询关键字
- 6.4 附录D Repository查询返回类型
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5.2.2 创建查询
通常情况下,Elasticsearch模块创建查询的机制与4.2节查询方法中描述的一样。通过下面的例子,我们来看看Elasticsearch模块会根据一个查询方法生成怎样的查询语句。
Example 37. Query creation from method names(通过方法名创建查询)
public interface BookRepository extends Repository<Book, String>
{
List<Book> findByNameAndPrice(String name, Integer price);
}
根据上面的方法名会生成下面的Elasticsearch查询语句
{ "bool" :
{ "must" :
[
{ "field" : {"name" : "?"} },
{ "field" : {"price" : "?"} }
]
}
}
下面的表格列出了所有Elasticsearch支持的关键字。
Table 2. Supported keywords inside method names(方法名中支持的关键字)
关键字 | 例子 | Elasticsearch查询语句 |
---|---|---|
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" : "?"}}}} |
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(Collectionnames) | {"bool" : {"must" : {"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"name" : "?"}} ]}}}} |
NotIn | findByNameNotIn(Collectionnames) | {"bool" : {"must_not" : {"bool" : {"should" : {"field" : {"name" : "?"}}}}}} |
Near | findByStoreNear | 暂不支持 |
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}}}} |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论