QueryBuilder 是es中提供的一個查詢接口, 可以對其進行參數設置來進行數據查詢
1.termQuery("key",obj)完全匹配
QueryBuilders.termQuery("name","v1");
2.termsQuery("key",obj1,obj2...)一次匹配多值
QueryBuilders.termsQuery("name","v1","v2","v3");
3.matchQuery("key",obj)單個匹配,field不支持通配符,前綴具有高級特性
4.multiMatchQuery("text","field1","field2",...)匹配多個字段,field有通配符
5.matchAllQuery();匹配所有文件
mathcQuery與termQuery區別:
matchQuery:會將搜索詞分詞,再與目標查詢字段進行匹配,若分詞中的任意一個詞與目標字段匹配上,則可查詢到。
termQuery:不會對搜索詞進行分詞處理,而是作為一個整體與目標字段進行匹配,若完全匹配,則可查詢到。
組合查詢
6.must(QueryBuilders): AND
7.mustNot(QueryBUilders):NOT
8.should :OR
QueryBuilders
.boolQuery()
.must(QueryBuilders.termQuery("name","Hello"))
.mustNot(QueryBuilders.termQuery("isEnable",true))
.should(QueryBuilders.termQuery("age","233"));
9.只根據id查詢
QueryBuilders.idsQuery(String ..type).ids(Collection<String>ids);
QueryBuilders.idsQuery().ids("CHszwWRURyK08j01p0Mmug", "ojGrYKMEQCCPvh75lHJm3A");
10.范圍查詢
QueryBuilder queryBuilder = QueryBuilders.rangeQuery("user")
.from("kim")
.to("lucy")
.includeLower(true) //包含上界
.includeUpper(true); //包含下屆
11.通配符查詢(支持* 匹配任何字符序列,包括空 避免*開始,會檢索大量內容造成效率緩慢)
QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("user","he*o");
12.分詞 模糊查詢 fuzzy query
QueryBuilders.fuzzyQuery("name","hello");
13.前綴匹配查詢 prefix query
QueryBuilders.prefixQuery("name","hello");
14.嵌套查詢
QueryBuilders.nestedQuery("policy", //path
QueryBuilders.boolQuery() // Your query
.must(QueryBuilders.termQuery("name", "hello"))
.must(QueryBuilders.rangeQuery("age").lt("23"))
,ScoreMode.None);// max,total,avg,none
public static NestedQueryBuilder nestedQuery(String path, QueryBuilder query, ScoreMode scoreMode) {
return new NestedQueryBuilder(path, query, scoreMode);
}