diff --git a/src/main/java/org/noear/esearchx/model/EsCondition.java b/src/main/java/org/noear/esearchx/model/EsCondition.java index 957a68862a13059ee24d19965b7cc6e30ac71b97..ceebfdb2bba6887bf5d5ddc6b8ce0a734eaa0224 100644 --- a/src/main/java/org/noear/esearchx/model/EsCondition.java +++ b/src/main/java/org/noear/esearchx/model/EsCondition.java @@ -4,6 +4,7 @@ import org.noear.esearchx.PriUtils; import org.noear.snack.ONode; import java.util.Arrays; +import java.util.Collection; import java.util.function.Consumer; /** @@ -14,7 +15,8 @@ import java.util.function.Consumer; */ public class EsCondition { private final ONode oNode; - public EsCondition(ONode oNode){ + + public EsCondition(ONode oNode) { this.oNode = oNode; } @@ -24,12 +26,12 @@ public class EsCondition { /** * 设置过滤风格 - * */ + */ private void filterStyleSet(String name) { if (score_mode == null) { oNodeArray = oNode.getOrNew("bool").getOrNew(name).asArray(); } else { - //使用评分模式 + // 使用评分模式 oNodeArray = oNode.getOrNew("function_score").getOrNew("query").getOrNew("bool").getOrNew(name).asArray(); if (score_mode.length() > 0) { @@ -40,13 +42,13 @@ public class EsCondition { /** * 设置过滤风格 - * */ + */ private void filterSet(String type, String field, Object value) { if (oNodeArray == null) { if (score_mode == null) { oNode.getOrNew(type).set(field, value); - }else{ - //使用评分模式 + } else { + // 使用评分模式 oNode.getOrNew("function_score").getOrNew("query").getOrNew(type).set(field, value); if (score_mode.length() > 0) { oNode.getOrNew("function_score").set("score_mode", score_mode); @@ -59,7 +61,7 @@ public class EsCondition { /** * 启用评分定制 - * + *

* function_score/.. */ public EsCondition useScore() { @@ -68,7 +70,7 @@ public class EsCondition { /** * 启用评分定制 - * + *

* function_score/.. */ public EsCondition useScore(String mode) { @@ -82,10 +84,9 @@ public class EsCondition { } - /** * 只过滤,不参与打分 - * + *

* bool/filter */ public EsCondition filter() { @@ -95,7 +96,7 @@ public class EsCondition { /** * 如果有多个条件,这些条件都必须满足 and与 - * + *

* bool/must */ public EsCondition must() { @@ -105,7 +106,7 @@ public class EsCondition { /** * 如果有多个条件,满足一个或多个即可 or或 - * + *

* bool/should */ public EsCondition should() { @@ -115,7 +116,7 @@ public class EsCondition { /** * 设置should条件最小匹配数 - * + *

* bool/minimum_should_match */ public EsCondition minimumShouldMatch(int min) { @@ -125,7 +126,7 @@ public class EsCondition { /** * 和must相反,必须都不满足条件才可以匹配到 !非 - * + *

* bool/mustNot */ public EsCondition mustNot() { @@ -137,7 +138,7 @@ public class EsCondition { /** * match_all */ - public void matchAll(){ + public void matchAll() { oNode.getOrNew("match_all").asObject(); } @@ -161,7 +162,6 @@ public class EsCondition { return this; } - /** * match */ @@ -170,6 +170,13 @@ public class EsCondition { return this; } + /** + * match + */ + public EsCondition matchIf(boolean condition, String field, Object value) { + return condition ? match(field, value) : this; + } + /** * match_phrase */ @@ -178,6 +185,13 @@ public class EsCondition { return this; } + /** + * match_phrase + */ + public EsCondition matchPhraseIf(boolean condition, String field, Object value) { + return condition ? matchPhrase(field, value) : this; + } + /** * match_phrase slop */ @@ -190,6 +204,12 @@ public class EsCondition { return this; } + /** + * match_phrase slop + */ + public EsCondition matchPhraseIf(boolean condition, String field, Object value, int slop) { + return condition ? matchPhrase(field, value, slop) : this; + } /** * match_phrase_prefix @@ -199,6 +219,13 @@ public class EsCondition { return this; } + /** + * match_phrase_prefix + */ + public EsCondition matchPhrasePrefixIf(boolean condition, String field, Object value) { + return condition ? matchPhrasePrefix(field, value) : this; + } + /** * match_phrase_prefix slop */ @@ -211,6 +238,13 @@ public class EsCondition { return this; } + /** + * match_phrase_prefix slop + */ + public EsCondition matchPhrasePrefixIf(boolean condition, String field, Object value, int slop) { + return condition ? matchPhrasePrefix(field, value, slop) : this; + } + /** * exists */ @@ -219,6 +253,13 @@ public class EsCondition { return this; } + /** + * exists + */ + public EsCondition existsIf(boolean condition, String field) { + return condition ? exists(field) : this; + } + /** * term */ @@ -227,6 +268,12 @@ public class EsCondition { return this; } + /** + * term + */ + public EsCondition termIf(boolean condition, String field, Object value) { + return condition ? term(field, value) : this; + } /** * terms @@ -236,6 +283,28 @@ public class EsCondition { return this; } + /** + * terms + */ + public EsCondition terms(String field, Collection values) { + filterSet("terms", field, PriUtils.newNode().addAll(values)); + return this; + } + + /** + * terms + */ + public EsCondition termsIf(boolean condition, String field, Object... values) { + return condition ? terms(field, (Object[]) values) : this; + } + + /** + * terms + */ + public EsCondition termsIf(boolean condition, String field, Collection values) { + return condition ? terms(field, values) : this; + } + /** * range */ @@ -248,6 +317,13 @@ public class EsCondition { return this; } + /** + * range + */ + public EsCondition rangeIf(boolean condition, String field, Consumer range) { + return condition ? range(field, range) : this; + } + /** * prefix @@ -257,6 +333,13 @@ public class EsCondition { return this; } + /** + * prefix + */ + public EsCondition prefixIf(boolean condition, String field, String value) { + return condition ? prefix(field, value) : this; + } + /** * wildcard * @@ -267,6 +350,15 @@ public class EsCondition { return this; } + /** + * wildcard + * + * @param value *表示任意字符,?表示任意单个字符( + */ + public EsCondition wildcardIf(boolean condition, String field, String value) { + return condition ? wildcard(field, value) : this; + } + /** * regexp */ @@ -275,10 +367,17 @@ public class EsCondition { return this; } + /** + * regexp + */ + public EsCondition regexpIf(boolean condition, String field, String value) { + return condition ? regexp(field, value) : this; + } + /** * script */ - public EsCondition script(String source, Consumer params) { + public EsCondition script(String source, Consumer params) { return script(source, "painless", params); } @@ -303,7 +402,7 @@ public class EsCondition { /** * 添加下级条件 - * */ + */ public EsCondition add(Consumer condition) { if (oNodeArray == null) { throw new IllegalArgumentException("Conditions lack combination types"); @@ -315,4 +414,4 @@ public class EsCondition { return this; } -} \ No newline at end of file +}