多条件查询,当过个条件知足时返回文档,bool查询由一个或多个字句组成缓存
occurrence | 描述 |
---|---|
must | 返回的文档必须知足must子句的条件,而且参与计算分值 |
filter | 【filter之前时单独的query DSL,如今纳入bool query】;子句(查询)必须出如今匹配的文档中。然而,不一样于must查询的是——它不参与分数计算。 Filter子句在过滤器上下文(filter context)中执行,这意味着score被忽略而且子句可缓存【因此filter可能更快】 |
should | “权限”比must/filter低。若是没有must或者filter,有一个或者多个should子句,那么只要知足一个就能够返回。minimum_should_match参数定义了至少知足几个子句。 |
must_not | 返回的文档必须不知足must_not定义的条件 |
/** * 多条件查询 */ public static void boolQuery() { QueryBuilder query = QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery("title", "董事"))//知足“董事”在“title”的分词集合中 .must(QueryBuilders.wildcardQuery("title", "*审*"))//知足“*审*”通配符匹配“title” .filter(QueryBuilders.matchQuery("author", "生物"));//知足“author”匹配“生物” SearchResponse response = getClient().prepareSearch("telegraph").setQuery(query).setSize(5).get(); SearchHits hits = response.getHits(); for (SearchHit searchHit : hits) { System.out.println(searchHit.getSourceAsString()); } }
测试测试
public static void main(String[] args) { boolQuery(); }
执行结果:ui
{ "title":"董事长、3名公司高管和2名中层人员被公安机关依法审查", "content":"财联社7月24日讯,长生生物公告称,董事长及部分高管没法正常履职,长春市长春新区公安分局对长春长生生产冻干人用狂犬病疫苗涉嫌违法犯罪案件立案调查,将主要涉案人员公司董事长、3名公司高管和2名中层人员带至公安机关依法审查", "author":"长生生物" }