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