当前位置: 首页 > 知识库问答 >
问题:

如何在Spring boot中使用QueryBuilder列表中的NativeSearchQueryBuilder构建查询?

罗韬
2023-03-14

如果某些属性匹配,我已经添加了一个QueryBuilders列表。现在,我想使用这些列表进行搜索。

    @Override
    public List<com.example.jobcandidatemanagement.documents.Job> searchJobs(String phrase, LocalDate startDate, LocalDate endDate, double offeredSalary, Availability availability) {

        List<QueryBuilder> searchQueries = new ArrayList<>();

        if (phrase != null) {
            QueryBuilder byPhrase = QueryBuilders.multiMatchQuery(phrase, "position", "description");
            searchQueries.add(byPhrase);
        }

        if (startDate != null && endDate != null) {
            QueryBuilder byStartDate = QueryBuilders.rangeQuery("startDate").gt(JsonData.of(startDate));
            QueryBuilder byEndDate = QueryBuilders.rangeQuery("endDate").lt(JsonData.of(endDate));
            searchQueries.add(byStartDate);
            searchQueries.add(byEndDate);
        }

        if (offeredSalary >= 0) {
            QueryBuilder byOfferedSalary = QueryBuilders.rangeQuery("offeredSalary").lte(offeredSalary);
            searchQueries.add(byOfferedSalary);
        }

        if (availability != null) {
            QueryBuilder byAvailability = QueryBuilders.matchQuery("availability", availability);
            searchQueries.add(byAvailability);
        }

    }

我想创建一个查询使用以上所有queryBuilder。大概是这样的:

Query query = new NativeSearchQueryBuilder().withQuery(byPhrase)
                                            .withQuery(byStartDate)
                                            .withQuery(byEndDate)
                                            .withQuery(byOfferedSalary)
                                            .withQuery(byAvailability)
                                            .build();

共有1个答案

陶腾
2023-03-14

您可以重写方法,通过使用其< code > must(query builder query builder)方法,将每个新的< code>QueryBuilder添加到< code>List中,而不是添加到< code>BoolQueryBuilder中:

BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();

if (phrase != null) {
    QueryBuilder byPhrase = QueryBuilders.multiMatchQuery(phrase, "position", "description");
    boolQueryBuilder.must(byPhrase);
}
// adding other builders

BoolQueryBuilder还实现了QueryBuilder接口,因此您可以执行以下操作:

Query query = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).build();

请注意,must() 方法意味着传递的查询必须出现在匹配的文档中,并且将有助于评分。如果您不想影响评分,请尝试 filter(QueryBuilder queryBuilder),它执行相同的操作,但传递的查询不会对评分产生影响。

 类似资料:
  • 我不熟悉java和springboot。我正在尝试使用springboot创建一个CRUD应用程序。我使用MySQL存储数据。 员工模式- 员工资源库- 员工控制员- 上面的控制器在JSON对象数组表单中给出了结果,如下所示 但我需要以下表格的回复 非常感谢你的帮助。

  • 本文向大家介绍如何在ABAP中使用表构建结构?,包括了如何在ABAP中使用表构建结构?的使用技巧和注意事项,需要的朋友参考一下 在结构内指定表时的基本规则是,您必须对该字段赋予非唯一约束。 然后在结构定义中使用它:

  • 我在Spring Web项目中使用ElasticSearch作为一个搜索服务,它使用传输客户端与ES通信。 我想知道是否有一种方法可以从JSON DSL构造QueryBuilder。例如,将此bool查询DSL JSON转换为QueryBuilder。 我需要这个方法,因为我必须从web前端接收用户的布尔字符串输入,并将这个布尔字符串解析到QueryBuilder。但是,它不适合使用。因为我们可能

  • 问题内容: 我有下面的代码,我在布尔查询中做多个必须的。在这里,我将在字段“地址”中传递必填项查询。现在,该IP地址将以其他api的列表的形式出现在我的面前,我必须将列表中的所有IP作为必填项查询传递给我。在这里,我没有办法创建QueryBuilder时如何动态传递地址值。 请提出建议。 问题答案: 您可以使用条件查询为单个字段传递多个值。创建一个字符串数组或集合。并将其传递给条款查询。 希望能帮

  • 我已经为这些列表创建了模型类,这些列表是我收到的对我的服务的响应 清单1 清单2 列表3是最后的列表,上面两个列表映射的结果,即我的服务的响应 清单3 这些列表与用户名和用户标签相连。我已将列表1的所有值映射到列表3。现在对于列表2,我需要检查每个userLabel是否在list3中存在一个userName等于userLabel的对象,如果为true,则totalUsers的值设置为list3的那

  • 我试图在Springboot中实现Elasticsearch的match\u phrase\u前缀。我试图在Springboot中构建以下查询:- } 我得到了以下代码:- 但是,当我运行代码时,它会抛出以下异常:- 使用以下代码生成的查询是:- } 我厌倦了在QueryBuilder中将zero\u terms\u query设置为NONE、ALL、NULL,但仍然得到相同的异常。