*字段名用fieldName代替,具體值用{fieldValue}代替
1、精確查詢(數字或字符串)
【數字】
A:單個
QueryBuilder qb1 = QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
B:批量
QueryBuilder qb1 = QueryBuilders.termsQuery("${fieldName}", "${fieldValues}");
字符串
A:單個
QueryBuilder qb1 = QueryBuilders.termQuery("${fieldName}.keyword", "${fieldValue}");
B:批量
QueryBuilder qb1 = QueryBuilders.termQuery("${fieldName}.keyword", "${fieldValue}");
2、數值比較
【大於】QueryBuilders.rangeQuery("${fieldName}.").gt(${fieldValue})
【大於等於】QueryBuilders.rangeQuery("${fieldName}.").gte(${fieldValue})
【小於】QueryBuilders.rangeQuery("${fieldName}.").lt(${fieldValue})
【小於等於】QueryBuilders.rangeQuery("${fieldName}.").lte(${fieldValue})
3、腳本使用
【數值計算】
String queryStr = "(doc['TICKETPRICE'].value % 50000 == 0)";
Script script = new Script(queryStr);
QueryBuilders.scriptQuery(script);
4、模糊查詢
【第一種】QueryBuilders.matchPhraseQuery("${fieldName}", "${fieldValue}")
【第二種,"${fieldValues}”的格式為 a | b | c ,可一次性查詢滿足a或者b或者c的數據】QueryBuilders.simpleQueryStringQuery("${fieldValues}").field("${fieldName}")
5、模糊查詢之組合多條件查詢
elasticsearch提供bool來實現這種需求
主要參數:
must:文檔 必須 匹配這些條件才能被包含進來。
must_not:文檔 必須不 匹配這些條件才能被包含進來。
should:如果滿足這些語句中的任意語句,將增加 _score ,否則,無任何影響。它們主要用於修正每個文檔的相關性得分。
filter:必須 匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標准來排除或包含文檔。
例子:
【must】
//${fieldName} = "${fieldValue}" and ${fieldName} = "${fieldValue}"
QueryBuilder qf1= QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilder qf2= QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilder q1 = QueryBuilders.boolQuery().must(qf1).must(q2);
【must not】
//${fieldName} != "${fieldValue}"
QueryBuilder q2 = QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilders.boolQuery().mustNot(q2);
【should】
//${fieldName} = "${fieldValue}" and ${fieldName} = "${fieldValue}"
QueryBuilder qf1= QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilder qf2= QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilder q3 = QueryBuilders.boolQuery().should(qf1).should(qf2);
陸續還會繼續分享,敬請期待~~
