1.constant_score 查询
2.bool 查询
多条件查询,当过个条件满足时返回文档,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();
}
执行结果:
{
"title":"董事长、3名公司高管和2名中层人员被公安机关依法审查",
"content":"财联社7月24日讯,长生生物公告称,董事长及部分高管无法正常履职,长春市长春新区公安分局对长春长生生产冻干人用狂犬病疫苗涉嫌违法犯罪案件立案调查,将主要涉案人员公司董事长、3名公司高管和2名中层人员带至公安机关依法审查",
"author":"长生生物"
}
3.dis_max查询
4.function_score查询
5.boosting查询