如何在ElasticSearch中查询特定字段的值列表?

qnyhuwrf  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(262)

我有以下POJO:

@Data
@Document(indexName = "person")
public class Person {

  @Id
  @JsonIgnore
  private String id;

   private String mainId;

  private String name;
}

如何从给定值列表的mainId字段进行搜索(例如:[“1234”,“567”,“8910”]?
到目前为止,我都是用这个来编写代码的。但是当我试图传递一个包含太多值的列表时,它给了我一个异常:

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    for (String mainId : mainIds) {
      queryBuilder.should(QueryBuilders.matchQuery("mainId", mainId ));
    }
    NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
        .withQuery(queryBuilder).build();

    SearchHits<T> searchHits = this.operations.search(searchQuery, this.entityClass,
        this.operations.getIndexCoordinatesFor(this.entityClass));
gcuhipw9

gcuhipw91#

您可以使用词汇查询,透过传递一个数组或一组String,来比对具有多个值的字段。

QueryBuilder queryBuilder = QueryBuilders.boolQuery()
            .should(QueryBuilders.termsQuery("mainId",mainId));

请注意termsQuery中的“s”。

相关问题