gpt4 book ai didi

spring-data-elasticsearch - 在 spring-data elasticsearch 中使用 NativeSearchQueryBuilder 过滤查询

转载 作者:行者123 更新时间:2023-12-04 15:33:36 25 4
gpt4 key购买 nike

我是 Elasticsearch 的新手。我有一个过滤查询,它使用控制台为我提供正确的结果:

GET _search
{
"query": {
"filtered": {
"query": {
"bool" : {
"should" : [
{
"match" : { "name" : "necklace" }
},
{
"match" : { "skuCode" : "necklace" }
}
]
}
},
"filter": {
"bool" : {
"must" : [
{
"term" : { "enabled" : true }
},
{
"term" : { "type" : "SIMPLE" }
},
{
"term" : { "tenantCode" : "Triveni" }
}
]
}
}
}
}
}

我无法获得相应的 spring-data 版本。这是我尝试过的:
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(boolQuery().should(matchQuery("skuCode", keyword)).should(matchQuery("name", keyword))).withFilter(
boolFilter().must(termFilter("enabled", true), termFilter("type", "SIMPLE"), termFilter("tenantCode", "Triveni"))).build();

这个查询没有给我任何结果。

有人可以帮我解决这个问题吗?

最佳答案

NativeSearchQueryBuilder.withFilter 被转换为所谓的 post_filter。见 Post Filter更多细节。因此,您在控制台上所做的查询与 spring-data elasticsearch 生成的查询不同。要从控制台模拟查询,您必须改用 FilteredQuery。

将您的查询构建更改为:

QueryBuilder boolQueryBuilder = boolQuery().should(matchQuery("skuCode", keyword)).should(matchQuery("name", keyword));
FilterBuilder filterBuilder = boolFilter().must(termFilter("enabled", true), termFilter("type", "SIMPLE"), termFilter("tenantCode", "Triveni"));
NativeSearchQueryBuilder().withQuery(QueryBuilders.filteredQuery(boolQueryBuilder, filterBuilder).build();

尽管只要您不使用聚合,这应该不会影响(命中)结果。

关于spring-data-elasticsearch - 在 spring-data elasticsearch 中使用 NativeSearchQueryBuilder 过滤查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28116404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com