问题及解决方法
must和should组合查询,should失效。使用must嵌套查询,将should组成的bool查询包含在其中一个must查询中。
SearchRequest request = new SearchRequest();
request.indices("function_log");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if (StringUtils.hasText(schoolName)) {
boolQueryBuilder.must(QueryBuilders.termQuery("schoolName.keyword", schoolName));
}
if (StringUtils.hasText(typeFunction)) {
boolQueryBuilder.must(QueryBuilders.termQuery("typeFunction.keyword", typeFunction));
}
if (StringUtils.hasText(startTime) && StringUtils.hasText(endTime)) {
boolQueryBuilder.must(QueryBuilders.rangeQuery("createDate").gte(startTime + "T00:00:00.000Z").lte(endTime + "T23:59:59.000Z"));
}
BoolQueryBuilder shouldQuery = QueryBuilders.boolQuery();
shouldQuery.should().add(QueryBuilders.termQuery("description.keyword","查询学生信息表"));
shouldQuery.should().add(QueryBuilders.termQuery("description.keyword","获取学校访客数据"));
boolQueryBuilder.must(shouldQuery);
sourceBuilder.query(boolQueryBuilder);
request.source(sourceBuilder);
System.out.println(sourceBuilder.toString());

GET /function_log/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"schoolName.keyword": {
"value": "测试学校",
"boost": 1
}
}
},
{
"term": {
"typeFunction.keyword": {
"value": "教师端功能",
"boost": 1
}
}
},
{
"range": {
"createDate": {
"from": "2023-08-01T00:00:00.000Z",
"to": "2023-08-07T23:59:59.000Z",
"include_lower": true,
"include_upper": true,
"boost": 1
}
}
},
{
"bool": {
"should": [
{
"term": {
"description.keyword": {
"value": "查询学生信息表",
"boost": 1
}
}
},
{
"term": {
"description.keyword": {
"value": "获取学校访客数据",
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
}
}
文章讲述了在Elasticsearch中,如何使用must和should组合进行多条件查询,当should查询失效时,将其嵌套在must查询中以确保搜索效果。示例代码展示了如何构造一个包含学校名、功能类型、日期范围以及描述关键词的复杂搜索请求。
1676

被折叠的 条评论
为什么被折叠?



