Java Sping Boot 中的术语查询

yvfmudvl  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(119)

我正在尝试在Java Sping Boot 中的ES查询的should子句中添加术语。我需要它看起来像这样:

"should": [
    {
      "terms": {
        "segment_status.nse_status": [
          2,
          3
        ],
        "boost": 1
      }
    },
    {
      "terms": {
        "segment_status.pml_status": [
          2,
          3
        ],
        "boost": 1
      }
    }
  ]

我只能为每个should子句添加一个terms条件,但是我需要在同一个should子句中追加多个terms。我的代码:

TermsQueryBuilder termsQuery = termsQuery(SEGMENT_STATUS + DOT + "bse_status", failedUserStatues);
BoolQueryBuilder includeCriteria = boolQuery();
includeCriteria.should(termsQuery);
NestedQueryBuilder nestedQueryForCriteria = nestedQuery(SEGMENT_STATUS, includeCriteria, ScoreMode.Avg);
searchQuery.must(nestedQueryForCriteria);

我使用的是Sping Boot 和ES版本6。4

aiqt4smr

aiqt4smr1#

我试了一下这个,它和预期的一样工作。使用循环进行迭代,并在每次迭代中创建一个terms查询,并在每次迭代中调用should(termsQuery)。

6ju8rftf

6ju8rftf2#

我们可以使用下面的代码在单个should子句中添加多个术语

BoolQueryBuilder query = boolQuery()
            .should(termQuery("segment_status.nse_status", new int[]{2,3}).boost(1f))
            .should(termQuery("segment_status.pml_status", new int[]{2,3}).boost(1f));
fcg9iug3

fcg9iug33#

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
TermsQueryBuilder nseStatusQueryBuilder = QueryBuilders.termsQuery("segment_status.nse_status", 2, 3);
TermsQueryBuilder pmlStatusQueryBuilder = QueryBuilders.termsQuery("segment_status.pml_status", 2, 3);

sourceBuilder.query(QueryBuilders.boolQuery().should(nseStatusQueryBuilder).should(pmlStatusQueryBuilder));
elasticsearchTemplate.search(new NativeSearchQueryBuilder().withSource(sourceBuilder).build(), YourDocument.class);

在这里,我们使用TermsQueryBuilder创建了两个术语查询,然后使用boolQuery和should方法将这些查询附加到should。

相关问题