elasticsearch中must和should同时使用

elasticsearch中需要查询name ='张三'  并且  code为1或2或3的数据,下面有两种写法:

List list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");

1)第一种
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
QueryBuilder name= QueryBuilders.termQuery("name", "张三");
boolQueryBuilder.must(name);
BoolQueryBuilder boolQueryBuilder_2 = QueryBuilders.boolQuery();
list.forEach(temp ->{
      boolQueryBuilder_2.should(QueryBuilders.termQuery("code", temp));
 });
boolQueryBuilder.must(boolQueryBuilder_2);

2)第二种
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
QueryBuilder name= QueryBuilders.termQuery("name", "张三");
QueryBuilder code= QueryBuilders.termsQuery("code", list);  //注意此为termsQuery
boolQueryBuilder.must(name).must(code);

你可能感兴趣的:(elasticsearch)