当前位置: 首页 > news >正文

Spring Data访问Elasticsearch----查询方法

Spring Data访问Elasticsearch----查询方法

  • 一、查询lookup策略
    • 1.1 声明的查询
  • 二、创建查询
  • 三、方法返回类型
  • 四、使用@Query注解

一、查询lookup策略

Elasticsearch模块支持所有基本的查询构建功能,如字符串查询、native搜索查询、基于条件的查询和从方法名派生的查询。

1.1 声明的查询

从方法名称派生查询并不总是足够的,并且可能导致方法名称不可读。在这种情况下,可以使用@Query注解(请参见四、使用@Query注解)。

二、创建查询

通常,Elasticsearch的查询创建机制如定义查询方法中描述的那样工作。下面是一个简短的示例,说明了Elasticsearch查询方法的含义:
例1:从方法名创建查询

interface BookRepository extends Repository<Book, String> {List<Book> findByNameAndPrice(String name, Integer price);
}

上面的方法名将被转换为下面的Elasticsearch json查询

{"query": {"bool" : {"must" : [{ "query_string" : { "query" : "?", "fields" : [ "name" ] } },{ "query_string" : { "query" : "?", "fields" : [ "price" ] } }]}}
}

Elasticsearch支持的关键字列表如下所示。
表1:方法名称中支持的关键字

关键字例子Elasticsearch查询字符串
AndfindByNameAndPrice{ “query” : {“bool” : {“must” : [{ “query_string” : { “query” : “?”, “fields” : [ “name” ] } },{“query_string” : { “query” : “?”, “fields” : [ “price” ] } }]}}}
OrfindByNameOrPrice{“query”:{“bool”:{“should”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}},{“query_string”:{“query”:“?”,“fields”:[“price”]}}]}}}
IsfindByName{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}}]}}}
NotfindByNameNot{“query”:{“bool”:{“must_not”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}}]}}}
BetweenfindByPriceBetween{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}
LessThanfindByPriceLessThan{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:false}}}]}}}
LessThanEqualfindByPriceLessThanEqual{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}
GreaterThanfindByPriceGreaterThan{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:false,“include_upper”:true}}}]}}}
GreaterThanEqualfindByPriceGreaterThanEqual{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:true,“include_upper”:true}}}]}}}
BeforefindByPriceBefore{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}
AfterfindByPriceAfter{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:true,“include_upper”:true}}}]}}}
LikefindByNameLike{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?*”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}
StartingWithfindByNameStartingWith{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?*”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}
EndingWithfindByNameEndingWith{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“*?”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}
Contains/ContainingfindByNameContaining{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}
In (when annotated as FieldType.Keyword)findByNameIn(Collection<String> names){“query”:{“bool”:{“must”:[{“bool”:{“must”:[{“terms”:{“name”:[“?”,“?”]}}]}}]}}}
InfindByNameIn(Collection<String> names){ “query”: {“bool”: {“must”: [{“query_string”:{“query”: “”?" “?”", “fields”: [“name”]}}]}}}
NotIn (when annotated as FieldType.Keyword)findByNameNotIn(Collection<String> names){“query”:{“bool”:{“must”:[{“bool”:{“must_not”:[{“terms”:{“name”:[“?”,“?”]}}]}}]}}}
NotInfindByNameNotIn(Collectionnames){“query”: {“bool”: {“must”: [{“query_string”: {“query”: “NOT(”?" “?”)", “fields”: [“name”]}}]}}}
TruefindByAvailableTrue{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“true”,“fields”:[“available”]}}]}}}
FalsefindByAvailableFalse{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“false”,“fields”:[“available”]}}]}}}
OrderByfindByAvailableTrueOrderByNameDesc{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“true”,“fields”:[“available”]}}]}},“sort”:[{“name”:{“order”:“desc”}}]}
ExistsfindByNameExists{“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}}
IsNullfindByNameIsNull{“query”:{“bool”:{“must_not”:[{“exists”:{“field”:“name”}}]}}}
IsNotNullfindByNameIsNotNull{“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}}
IsEmptyfindByNameIsEmpty{“query”:{“bool”:{“must”:[{“bool”:{“must”:[{“exists”:{“field”:“name”}}],“must_not”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}]}}}
IsNotEmptyfindByNameIsNotEmpty{“query”:{“bool”:{“must”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}}

不支持使用GeoJson参数构建Geo-shape查询的方法名。如果您需要在存储库中拥有这样的函数,请在自定义存储库实现中使用ElasticsearchOperations和CriteriaQuery。

三、方法返回类型

存储库方法可以定义为具有以下返回类型以返回多个元素:

  • List<T>
  • Stream<T>
  • SearchHits<T>
  • List<SearchHit<T>>
  • Stream<SearchHit<T>>
  • SearchPage<T>

四、使用@Query注解

例2:使用@Query注解在方法上声明query
传递给该方法的参数可以插入到查询字符串中的占位符中。第一个、第二个、第三个参数的占位符形式为?0、?1、?2等。

interface BookRepository extends ElasticsearchRepository<Book, String> {@Query("{\"match\": {\"name\": {\"query\": \"?0\"}}}")Page<Book> findByName(String name,Pageable pageable);
}

设置为注解参数的String必须是一个有效的Elasticsearch JSON查询。它将作为查询元素的值发送给Elasticsearch;例如,如果使用参数John调用函数,它将产生以下查询体:

{"query": {"match": {"name": {"query": "John"}}}
}

例3:使用Collection参数的方法上的@Query注解

@Query("{\"ids\": {\"values\": ?0 }}")
List<SampleEntity> getByIds(Collection<String> ids);

像上面这样的存储库方法将进行ID查询以返回所有匹配的文档。因此,调用List为[“id1”、“id2”、“id3”]的方法将生成查询体

{"query": {"ids": {"values": ["id1", "id2", "id3"]}}
}
http://www.lryc.cn/news/322069.html

相关文章:

  • PyTorch 深度学习(GPT 重译)(四)
  • 视频无水印批量下载软件|抖音视频提取工具
  • 【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git
  • 小程序中实现轮播图左向堆叠
  • 零基础入门数据挖掘系列之「建模调参」
  • 如何在Mac中删除照片?这里有详细步骤
  • Qt笔记 事件处理_鼠标事件
  • 【Vue】三、使用ElementUI实现图片上传
  • ffmpeg的ffprobe.exe查询修改视频信息
  • Windows 2019服务器上安装NFS服务器
  • 元素定位之xpath和css
  • JavaScript 什么是纯函数,有哪些常见的纯函数
  • c++ 指针大小
  • IBM SPSS Statistics:提升数据处理效率的利器
  • is ignored, because it exists, maybe from xml file
  • Spark面试整理-Spark是什么?
  • Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化
  • 云蜜罐技术(德迅猎鹰)诞生
  • ARM:汇编点灯
  • 69: 偷菜时间表(python)
  • 【计算机视觉】三、图像处理——实验:图像去模糊和去噪、提取边缘特征
  • 用css滤镜做颜色不同的数据卡片(背景图对于css滤镜的使用)
  • 2024年第六届区块链与物联网国际会议(BIOTC 2024)即将召开!
  • Django动态路由实例
  • 基于Vue.js和D3.js的智能停车可视化系统
  • 数据之王国:解析Facebook的大数据应用
  • 前端小白的学习之路(ES6 一)
  • Linux CentOS 7.6安装Redis 6.2.6 详细保姆级教程
  • Android 优化 - 数据结构
  • Linux环境开发工具之vim