在Elasticsearch中,Bool Query由三部分组成:must,should和filter。他们的区别是什么?

should语句的含义是查询结果“应该”满足其中的条件,但即使没有也可以返回, 咋理解?没有也返回那和不加有啥区别?

1 个回答

  • java蚂蚁
    慢慢理解世界,慢慢更新自己。
    这三者有一些重要的差异: must:这是强制性的,返回的文档必须满足must子句中的所有条件。 filter:这也是强制性的,返回的文档必须满足filter子句中的所有条件。不过,filter子句的分数是恒定的,不会影响查询结果的相关性得分(_score)。 should:这是可选的。返回的文档应尽可能满足should子句中的条件。如果Bool Query中有must或者filter,should子句的条件不必强制满足。但是,如果Bool Query中没有must或者filter,那么至少需要满足一个should子句的条件。满足的should子句越多,文档的相关性得分越高。 所以,should子句可以用于提高查询结果的相关性得分。例如,假设你有一个应用,它可以让用户搜索文章。如果用户搜索"apple",那么含有"apple"的文章肯定应该被返回。但是,如果一个文章同时还含有"fruit"和"healthy",即使用户没有搜索这两个词,你也可能希望这篇文章的得分更高,因为它更相关。在这种情况下,你可以将"fruit"和"healthy"添加到should子句中。 ```java BoolQueryBuilder builder = QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery("content", "apple")) .should(QueryBuilders.matchQuery("content", "fruit")) .should(QueryBuilders.matchQuery("content", "healthy")); ``` 在这个例子中,只要文章含有"apple",就会被返回。但是,如果文章同时含有"fruit"或者"healthy",它的相关性得分就会更高。
    发布于 2023-06-15 02:43 •IP属地 江苏
    举报
    评论
    收藏