我正在使用spring-data-elasticsearch。我已经使用带有许多子标准的标准构建了大多数查询条件。现在我想为嵌套字段包含一个简单的查询条件。但是使用uery_stringAPI来标准corms查询,这不适用于嵌套字段。我期待嵌套查询。
如何在没有NativeSearchQuery的情况下使用条件来支持这一点?
嵌套映射
{
"ae": {
"type": "nested",
"properties": {
"atb": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"su": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
我想查询“ae.su.keyword”字段。构建标准使用此字段的查询使用此字段构建query_string查询,这不是按照预期重新生成正确的文档作为响应。我的期望是,有没有办法使用标准构建嵌套查询?或覆盖现有的标准查询?
Criteria criteria = new Criteria("ae.su.keyword").is("VALUE");
CriteriaQuery query = new CriteriaQuery(criteria);
elasticOperations.search(query, Foo.class, index);
目前Spring Data Elasticsearch的CriteriaQuery
不支持创建嵌套查询。
当前使用示例代码创建的查询是(清除不相关的部分):
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "one",
"fields": [
"ae.su.keyword^1.0"
]
}
}
]
}
}
}
使用嵌套对象,您需要的查询将是:
{
"query": {
"nested": {
"path": "ae",
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "one",
"fields": [
"ae.su.keyword"
]
}
}
]
}
}
}
}
}
基本上是将现在构建的查询包装在一个额外的嵌套查询中。
正如我所写的,目前不支持创建这个嵌套查询。除了构建NativeSearchQuery,您还可以使用StringQuery(是的,它也很难看):
Query query = new StringQuery("{\"nested\":{\"path\":\"ae\",#" +
"\"query\":{\"bool\":{\"must\":[{\"query_string\": {\"query\":\"$1\"," +
"\"fields\":[\"ae.su.keyword\"]}}]}}}}".replace("$1", value));
return operations.search(query, Foo.class);
2021年4月1日编辑:
这个话题再次出现在一个问题中,我打开了一个bug问题来解决这个问题。这些天我会去实施这个修复。
编辑05.04.2021:
从4.2.0开始修复。GA开启
问题内容: 给定以下结构,我想执行以下SQL的HQL或CriteriaQuery等效项: 我想找回与给定人员关联的位置列表,其creationDate在给定位置之后。 提前致谢! 标记 编辑***:我已经编辑了SQL,因为这有点误导。我不想独立查询位置。 问题答案: 这是不可能的,您无法查询。从JPA Wikibook: 嵌入式收藏 的映射可以被用来定义的集合 的对象。这不是对象的典型用法,因为对
问题内容: 我对JPA 2相当陌生,它是CriteriaBuilder / CriteriaQuery API: Java文档 在Java EE 6教程中 我想计算一个CriteriaQuery的结果而不实际检索它们。那有可能吗,我没有找到任何这样的方法,唯一的办法就是这样做: 那不可能是正确的方法… 有解决方案吗? 问题答案: 类型查询将返回。您要查询。 显然,您将希望使用示例中跳过的任何限制和
问题内容: 谁能给我一些关于如何将这种子查询放入提示?(我正在使用 JPA 2.0 - Hibernate 4.x ) -第二个选择将始终获得单个结果或null。 问题答案: 尝试类似以下示例的操作来创建子查询: 请注意,由于附近缺少IDE,因此该代码尚未经过测试。
问题内容: 我正在使用JPA2。出于安全原因,我正在使用CriteriaQuery进行类型安全的操作(因此,我没有在搜索针对类型查询的任何解决方案,等等)。 我最近遇到了一个需要设置SQL-LIMIT的问题。 经过大量搜索,我仍然没有找到成功的解决方案。 谁能帮我? 问题答案: 在查询上定义限制和偏移量: 从文档中: TypedQuery setFirstResult(int startPosit
我有两个表,它们通过一个外键来维护它们之间的父子关系。查询如下所示。我想在使用jpa的同时使用标准版。所以有人可以帮助我使用标准版吗 表“child”的“notification\u id\u child”列是外键,并引用表“parent”的主键。