首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用NativeSearchQueryBuilder在ElasticsearchRepository中使用嵌套字段id进行搜索?

如何使用NativeSearchQueryBuilder在ElasticsearchRepository中使用嵌套字段id进行搜索?
EN

Stack Overflow用户
提问于 2021-08-30 20:29:24
回答 1查看 455关注 0票数 0

我正在使用spring-data-elasticsearch,我有一个类如下所示,

代码语言:javascript
复制
@Document(indexName = "sample")
class Sample {

   @Id
   private String id;
   private String name;
   private Status status;
}

class Status {
   private String id;
}

上面是持久化到elasticsearch的。我有下面的方法在里面找到数据。

代码语言:javascript
复制
List<Sample> getAll(String statusId, String text, Pageable pageable);

这是我用来获取数据的当前代码,

代码语言:javascript
复制
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.multiMatchQuery(text)
                        .field("name")
                        .type(MultiMatchQueryBuilder.Type.PHRASE_PREFIX));
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();

我需要的是通过statusId查找结果,然后搜索包含在name字段中的文本。

我也尝试了下面的方法,但没有成功。我也尝试过criteria-api,但它只适用于没有空间的单词。如果有带空格的单词,就会抛出Cannot constructQuery '*\"text\"*'. Use expression or multiple clauses instead

.withFilter(QueryBuilders.termQuery("status.id", statusId))

那么,如何为上述场景构建查询呢?

根据P.J. Meisch的建议构建新的查询

代码语言:javascript
复制
QueryBuilder query1 = QueryBuilders.matchQuery("status.id", statusId).operator(Operator.AND);
QueryBuilder query2 = QueryBuilders.multiMatchQuery(text).field("name").type(MultiMatchQueryBuilder.Type.PHRASE_PREFIX);

new NativeSearchQueryBuilder().withQuery(QueryBuilders.boolQuery().must(query1).must(query2));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 04:32:40

顶级查询应该是一个bool查询,必须包含两个条目。

  • 是你已经拥有的name的第一个,
  • 是"status.id“属性

的第二个

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68989964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档