如何在spring-data弹性搜索中为嵌套对象过滤创建搜索查询?

内爆的沉默

我的文档就像:

class Foo{
 private Integer idDl;
 private String Name;
 private String Add;
 @Field(type = FieldType.Nested)
 private List< Bar> Bar;
 }
 
 class Bar{
 private Integer barId;
 private List<String> barData
 }

Foo样本数据是这样的:

{
    "idDl": 123,
    "Name": "ABCD",
    "Add": "FL",
    "Bar": [
        {
            "barId": 456,
            "barData": [
                "Bar1",
                "Bar2"
            ]
        },
        {
            "barId": 985,
            "barData": [
                "Bar4",
                "Bar5"
            ]
        }
    ]
}

我想返回所有匹配的Foo对象,Bar.barId但就像Bar列表中的对象一样FooFoo只能包含一个BarID与用户提供的ID匹配的对象.spring NativeSearchQueryBuilder-data- elasticsearch提供的对象为:

String[] includeFields = new String[]{"idDl", "Name"};
String[] excludeFields = new String[]{"Add"}; // to exclude Add field of Foo
Query searchQuery = new NativeSearchQueryBuilder()
            .withQuery(matchQuery("Bar.barId", 456))
            //.withQuery(termQuery("Bar.barId", 456))
            .withSourceFilter(new FetchSourceFilter(includeFields, excludeFields))
            .build();
return elasticsearchRestTemplate.queryForList( searchQuery, Foo.class);

我得到的响应包括所有Bar对象,而与ID无关,这是示例响应:

[
    {
        "idDl": 123,
        "Name": "ABCD",
        "Add": "FL",
        "Bar": [
            {
                "barId": 456,
                "barData": [
                    "Bar1",
                    "Bar2"
                ]
            },
            {
                "barId": 985,
                "barData": [
                    "Bar4",
                    "Bar5"
                ]
            }
        ]
    },
    {
        "idDl": 758,
        "Name": "PQR",
        "Add": "NY",
        "Bar": [
            {
                "barId": 456,
                "barData": [
                    "Bar1",
                    "Bar2"
                ]
            },
            {
                "barId": 671,
                "barData": [
                    "Bar24",
                    "Bar25"
                ]
            }
        ]
    }
]

我尝试使用termQuery摘要中的注释,但没有得到响应,因为matchQuery我得到了如上所述的响应。在响应中,Bar必须仅包含ID为456的对象,即在查询中发送的ID。任何建议都会有帮助

梅杰

您正在查询Foo存在Bar与条件匹配的对象,而Elasticsearch返回这些对象Foo如果只想Bar匹配s,则需要在查询中添加inner_hits。

检查此问题并回答如何检索这些内容,使用Spring Data Elasticsearch检索内部匹配将随版本4.1一起提供。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在弹性搜索中查询嵌套的json对象/字段?

如何在Spring Boot数据弹性搜索中搜索嵌套列表对象

如何在Java中翻译嵌套弹性搜索查询?

如何在弹性搜索中获取嵌套对象的数组计数

如何在弹性搜索中获取嵌套对象?

如何在弹性搜索中按嵌入的对象字段进行过滤

如何按对象键而不是对象属性使用弹性搜索嵌套查询

如何在弹性搜索中为字段创建自动增量值

如何在无痛弹性搜索中创建字典对象并向其添加数据

如何在弹性搜索中查询IP范围?

如何在弹性搜索中为数组数组编写映射?

如何从弹性搜索查询中获得准确的搜索结果

忽略嵌套对象上的 Spring 数据弹性搜索 MultiField 注释

如何为对象中的搜索创建过滤器?

如何在 Angular 中对嵌套的 JSON 对象使用搜索过滤器?

如何使用go在弹性搜索中按嵌套对象对文档进行排序?

如何使用弹性搜索返回匹配的嵌套对象

如何仅获取搜索到的弹性嵌套对象的分支

Spring数据弹性搜索-查询-全文搜索

如何在包含嵌套对象的对象数组中搜索值

如何过滤或搜索 q 中的嵌套列表

如何在弹性搜索中存储数据?

如何在弹性搜索中建立关系

如何使用“不”来过滤弹性搜索中的术语?

弹性搜索中如何应用过滤器?

如何在Spring Data JPA中搜索[FieldName]

你如何在 javascript 中创建过滤器搜索?

如何在嵌套的对象数组中实现搜索?

如何在弹性搜索文本搜索中匹配部分单词