From 2a855e225ccbdd41eb4ede151eeeebc1a2580a4f Mon Sep 17 00:00:00 2001 From: xpc1024 <252645816@qq.com> Date: Sat, 18 Mar 2023 23:00:15 +0800 Subject: [PATCH] =?UTF-8?q?v2.0-beta1=20=E5=85=A8=E9=83=A8=E7=BB=86?= =?UTF-8?q?=E8=8A=82=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../easyes/common/enums/EsQueryTypeEnum.java | 8 +- .../core/conditions/function/Compare.java | 1543 ++++++++++++++++- .../easyes/core/conditions/function/Func.java | 1048 ++++++++++- .../easyes/core/conditions/function/Geo.java | 670 ++++++- .../core/conditions/function/Index.java | 166 +- .../easyes/core/conditions/function/Join.java | 18 +- .../core/conditions/function/Nested.java | 95 +- .../core/conditions/function/Query.java | 47 +- .../core/conditions/function/Update.java | 24 +- .../core/core/AbstractChainWrapper.java | 4 +- .../cn/easyes/core/core/AbstractWrapper.java | 32 +- .../cn/easyes/core/core/BaseEsMapper.java | 2 +- .../cn/easyes/core/core/WrapperProcessor.java | 16 +- .../src/main/resources/application.yml | 2 +- .../java/cn/easyes/test/entity/Document.java | 5 + .../main/java/cn/easyes/test/entity/Faq.java | 1 - .../test/java/cn/easyes/test/all/AllTest.java | 17 +- .../test/java/cn/easyes/test/mix/MixTest.java | 162 ++ .../cn/easyes/test/nested/NestedTest.java | 23 +- 19 files changed, 3646 insertions(+), 237 deletions(-) create mode 100644 easy-es-test/src/test/java/cn/easyes/test/mix/MixTest.java diff --git a/easy-es-common/src/main/java/cn/easyes/common/enums/EsQueryTypeEnum.java b/easy-es-common/src/main/java/cn/easyes/common/enums/EsQueryTypeEnum.java index 92d5464a..97d176e7 100644 --- a/easy-es-common/src/main/java/cn/easyes/common/enums/EsQueryTypeEnum.java +++ b/easy-es-common/src/main/java/cn/easyes/common/enums/EsQueryTypeEnum.java @@ -92,19 +92,19 @@ public enum EsQueryTypeEnum { /** * 与条件,相当于MYSQL中的AND,必须满足且返回得分 */ - AND_MUST, + NESTED_AND, /** * 取反的与条件,必须不满足 */ - MUST_NOT, + NESTED_NOT, /** * 与条件必须满足,但不返回得分,效率更高 */ - AND_FILTER, + NESTED_FILTER, /** * 或条件,相当于MYSQL中的OR 和MP中的or嵌套用法一致 */ - OR_SHOULD, + NESTED_OR, /** * 嵌套查询 ES独有 对嵌套类型的查询 */ diff --git a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Compare.java b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Compare.java index 7b69ffea..34f69e11 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Compare.java +++ b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Compare.java @@ -18,7 +18,13 @@ import static cn.easyes.common.constants.BaseEsConstants.*; * Copyright © 2021 xpc1024 All Rights Reserved **/ public interface Compare extends Serializable { - + /** + * map 所有非空属性等于 = + * + * @param params map 类型的参数, key 是字段名, value 是字段值 + * @param ignore + * @return wrapper + */ default Children allEq(Map params) { return allEq(true, params); } @@ -29,11 +35,18 @@ public interface Compare extends Serializable { * @param condition 执行条件 * @param params map 类型的参数, key 是字段名, value 是字段值 * @param ignore - * @return children + * @return wrapper */ Children allEq(boolean condition, Map params); - + /** + * 字段过滤接口,传入多参数时允许对参数进行过滤 + * + * @param filter 返回 true 来允许字段传入比对条件中 + * @param params map 类型的参数, key 是字段名, value 是字段值 + * @param ignore + * @return wrapper + */ default Children allEq(BiPredicate filter, Map params) { return allEq(true, filter, params); } @@ -49,30 +62,83 @@ public interface Compare extends Serializable { */ Children allEq(boolean condition, BiPredicate filter, Map params); + /** + * 等于 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children eq(R column, Object val) { return eq(true, column, val); } + /** + * 等于 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children eq(R column, Object val, Float boost) { return eq(true, column, val, boost); } + /** + * 等于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children eq(boolean condition, R column, Object val) { return eq(condition, column, val, DEFAULT_BOOST); } + /** + * 等于 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children eq(String column, Object val) { return eq(true, column, val); } + /** + * 等于 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children eq(String column, Object val, Float boost) { return eq(true, column, val, boost); } + /** + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children eq(boolean condition, String column, Object val) { return eq(condition, column, val, DEFAULT_BOOST); } + /** + * 等于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children eq(boolean condition, R column, Object val, Float boost) { return eq(condition, FieldUtils.getFieldName(column), val, boost); } @@ -81,38 +147,92 @@ public interface Compare extends Serializable { * 等于 * * @param condition 是否执行的条件 - * @param column 列 + * @param column 列名 字符串 * @param val 值 * @param boost 权重 - * @return 泛型 + * @return wrapper */ Children eq(boolean condition, String column, Object val, Float boost); - + /** + * 分词匹配 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children match(R column, Object val) { return match(true, column, val); } + /** + * 分词匹配 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children match(R column, Object val, Float boost) { return match(true, column, val, boost); } + /** + * 分词匹配 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children match(boolean condition, R column, Object val) { return match(condition, column, val, DEFAULT_BOOST); } + /** + * 分词匹配 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children match(String column, Object val) { return match(true, column, val); } + /** + * 分词匹配 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children match(String column, Object val, Float boost) { return match(true, column, val, boost); } + /** + * 分词匹配 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children match(boolean condition, String column, Object val) { return match(condition, column, val, DEFAULT_BOOST); } + /** + * 分词匹配 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children match(boolean condition, R column, Object val, Float boost) { return match(condition, FieldUtils.getFieldName(column), val, boost); } @@ -121,38 +241,102 @@ public interface Compare extends Serializable { * match 分词匹配 * * @param condition 条件 - * @param column 列 + * @param column 列名 字符串 * @param val 值 * @param boost 权重值 * @return 泛型 */ Children match(boolean condition, String column, Object val, Float boost); - + /** + * 父子类型-根据父查子匹配 返回父文档 + * + * @param type 子索引名 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children hasChild(String type, String column, Object val) { return hasChild(true, type, column, val, ScoreMode.Avg, DEFAULT_BOOST); } + /** + * 父子类型-根据父查子匹配 返回父文档 + * + * @param type 子索引名 + * @param column 列名 字符串 + * @param val 值 + * @param scoreMode 得分模式 + * @return wrapper + */ default Children hasChild(String type, String column, Object val, ScoreMode scoreMode) { return hasChild(true, type, column, val, scoreMode, DEFAULT_BOOST); } + /** + * 父子类型-根据父查子匹配 返回父文档 + * + * @param condition 执行条件 + * @param type 子索引名 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children hasChild(boolean condition, String type, String column, Object val) { return hasChild(condition, type, column, val, ScoreMode.Avg, DEFAULT_BOOST); } + /** + * 父子类型-根据父查子匹配 返回父文档 + * + * @param condition 执行条件 + * @param type 子索引名 + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children hasChild(boolean condition, String type, String column, Object val, Float boost) { return hasChild(condition, type, column, val, ScoreMode.Avg, boost); } + /** + * 父子类型-根据父查子匹配 返回父文档 + * + * @param type 子索引名 + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children hasChild(String type, String column, Object val, Float boost) { return hasChild(true, type, column, val, ScoreMode.Avg, boost); } + /** + * 父子类型-根据父查子匹配 返回父文档 + * + * @param condition 执行条件 + * @param type 子索引名 + * @param column 列名 字符串 + * @param val 值 + * @param scoreMode 得分模式 + * @return wrapper + */ default Children hasChild(boolean condition, String type, String column, Object val, ScoreMode scoreMode) { return hasChild(condition, type, column, val, scoreMode, DEFAULT_BOOST); } + /** + * 父子类型-根据父查子匹配 返回父文档 + * + * @param type 子索引名 + * @param column 列名 字符串 + * @param val 值 + * @param scoreMode 得分模式 + * @param boost 权重 + * @return wrapper + */ default Children hasChild(String type, String column, Object val, ScoreMode scoreMode, Float boost) { return hasChild(true, type, column, val, scoreMode, boost); } @@ -166,35 +350,99 @@ public interface Compare extends Serializable { * @param val 值 * @param scoreMode 得分模式 * @param boost 权重 - * @return 泛型 + * @return wrapper */ Children hasChild(boolean condition, String type, String column, Object val, ScoreMode scoreMode, Float boost); - + /** + * 父子类型-根据子查父匹配 返回子文档 + * + * @param type 父索引名 + * @param column 列名 + * @param val 值 + * @return wrapper + */ default Children hasParent(String type, String column, Object val) { return hasParent(true, type, column, val, true, DEFAULT_BOOST); } + /** + * 父子类型-根据子查父匹配 返回子文档 + * + * @param type 父索引名 + * @param column 列名 + * @param val 值 + * @param score 是否计算评分 + * @return wrapper + */ default Children hasParent(String type, String column, Object val, boolean score) { return hasParent(true, type, column, val, score, DEFAULT_BOOST); } + /** + * 父子类型-根据子查父匹配 返回子文档 + * + * @param condition 执行条件 + * @param type 父索引名 + * @param column 列名 + * @param val 值 + * @return wrapper + */ default Children hasParent(boolean condition, String type, String column, Object val) { return hasParent(condition, type, column, val, true, DEFAULT_BOOST); } + /** + * 父子类型-根据子查父匹配 返回子文档 + * + * @param condition 执行条件 + * @param type 父索引名 + * @param column 列名 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children hasParent(boolean condition, String type, String column, Object val, Float boost) { return hasParent(condition, type, column, val, true, boost); } + /** + * 父子类型-根据子查父匹配 返回子文档 + * + * @param type 父索引名 + * @param column 列名 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children hasParent(String type, String column, Object val, Float boost) { return hasParent(true, type, column, val, true, boost); } + /** + * 父子类型-根据子查父匹配 返回子文档 + * + * @param condition 执行条件 + * @param type 父索引名 + * @param column 列明 + * @param val 值 + * @param score 是否计算评分 + * @return wrapper + */ default Children hasParent(boolean condition, String type, String column, Object val, boolean score) { return hasParent(condition, type, column, val, score, DEFAULT_BOOST); } + /** + * 父子类型-根据子查父匹配 返回子文档 + * + * @param type 父索引名 + * @param column 列名 + * @param val 值 + * @param score 是否计算评分 + * @param boost 权重 + * @return wrapper + */ default Children hasParent(String type, String column, Object val, boolean score, Float boost) { return hasParent(true, type, column, val, score, boost); } @@ -208,19 +456,41 @@ public interface Compare extends Serializable { * @param val 值 * @param score 是否计算评分 * @param boost 权重 - * @return 泛型 + * @return wrapper */ Children hasParent(boolean condition, String type, String column, Object val, boolean score, Float boost); - + /** + * 父子类型-根据父id查询 返回父id为指定父id的所有子文档 + * + * @param parentId 父id + * @param type 父索引名 + * @return wrapper + */ default Children parentId(Object parentId, String type) { return parentId(true, parentId, type, DEFAULT_BOOST); } + /** + * 父子类型-根据父id查询 返回父id为指定父id的所有子文档 + * + * @param condition 执行条件 + * @param parentId 父id + * @param type 父索引名 + * @return wrapper + */ default Children parentId(boolean condition, Object parentId, String type) { return parentId(condition, parentId, type, DEFAULT_BOOST); } + /** + * 父子类型-根据父id查询 返回父id为指定父id的所有子文档 + * + * @param parentId 父id + * @param type 父索引名 + * @param boost 权重 + * @return wrapper + */ default Children parentId(Object parentId, String type, Float boost) { return parentId(true, parentId, type, boost); } @@ -232,34 +502,89 @@ public interface Compare extends Serializable { * @param parentId 父id * @param type 父索引名 * @param boost 权重 - * @return 泛型 + * @return wrapper */ Children parentId(boolean condition, Object parentId, String type, Float boost); + /** + * 分词匹配 需要结果中也包含所有的分词,且顺序一样 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children matchPhrase(R column, Object val) { return matchPhrase(true, column, val, DEFAULT_BOOST); } + /** + * 分词匹配 需要结果中也包含所有的分词,且顺序一样 + * + * @param condition 执行条件 + * @param column 列名 + * @param val 值 + * @return wrapper + */ default Children matchPhrase(boolean condition, R column, Object val) { return matchPhrase(condition, column, val, DEFAULT_BOOST); } + /** + * 分词匹配 需要结果中也包含所有的分词,且顺序一样 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children matchPhrase(R column, Object val, Float boost) { return matchPhrase(true, column, val, boost); } + /** + * 分词匹配 需要结果中也包含所有的分词,且顺序一样 + * + * @param column 列名 + * @param val 值 + * @return wrapper + */ default Children matchPhrase(String column, Object val) { return matchPhrase(true, column, val, DEFAULT_BOOST); } + /** + * 分词匹配 需要结果中也包含所有的分词,且顺序一样 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children matchPhrase(boolean condition, String column, Object val) { return matchPhrase(condition, column, val, DEFAULT_BOOST); } + /** + * 分词匹配 需要结果中也包含所有的分词,且顺序一样 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children matchPhrase(String column, Object val, Float boost) { return matchPhrase(true, column, val, boost); } + /** + * 分词匹配 需要结果中也包含所有的分词,且顺序一样 + * + * @param condition 条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children matchPhrase(boolean condition, R column, Object val, Float boost) { return matchPhrase(condition, FieldUtils.getFieldName(column), val, boost); } @@ -271,19 +596,35 @@ public interface Compare extends Serializable { * @param column 列 * @param val 值 * @param boost 权重值 - * @return 泛型 + * @return wrapper */ Children matchPhrase(boolean condition, String column, Object val, Float boost); - + /** + * 查询全部文档 + * + * @return wrapper + */ default Children matchAllQuery() { return matchAllQuery(true, DEFAULT_BOOST); } + /** + * 查询全部文档 + * + * @param boost 权重 + * @return wrapper + */ default Children matchAllQuery(Float boost) { return matchAllQuery(true, boost); } + /** + * 查询全部文档 + * + * @param condition 执行条件 + * @return wrapper + */ default Children matchAllQuery(boolean condition) { return matchAllQuery(condition, DEFAULT_BOOST); } @@ -297,48 +638,136 @@ public interface Compare extends Serializable { */ Children matchAllQuery(boolean condition, Float boost); - + /** + * 前缀匹配 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children matchPhrasePrefixQuery(R column, Object val) { return matchPhrasePrefixQuery(true, column, val, DEFAULT_MAX_EXPANSIONS, DEFAULT_BOOST); } + /** + * 前缀匹配 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children matchPhrasePrefixQuery(boolean condition, R column, Object val) { return matchPhrasePrefixQuery(condition, column, val, DEFAULT_MAX_EXPANSIONS, DEFAULT_BOOST); } + /** + * 前缀匹配 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children matchPhrasePrefixQuery(R column, Object val, Float boost) { return matchPhrasePrefixQuery(true, column, val, DEFAULT_MAX_EXPANSIONS, boost); } + /** + * 前缀匹配 + * + * @param column 列 + * @param val 值 + * @param maxExpansions 最大扩展数 + * @return wrapper + */ default Children matchPhrasePrefixQuery(R column, Object val, int maxExpansions) { return matchPhrasePrefixQuery(true, column, val, maxExpansions, DEFAULT_BOOST); } + /** + * 前缀匹配 + * + * @param column 列 + * @param val 值 + * @param maxExpansions 最大扩展数 + * @param boost 权重 + * @return wrapper + */ default Children matchPhrasePrefixQuery(R column, Object val, int maxExpansions, Float boost) { return matchPhrasePrefixQuery(true, column, val, maxExpansions, boost); } - + /** + * 前缀匹配 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children matchPhrasePrefixQuery(String column, Object val) { return matchPhrasePrefixQuery(true, column, val, DEFAULT_MAX_EXPANSIONS, DEFAULT_BOOST); } + /** + * 前缀匹配 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children matchPhrasePrefixQuery(boolean condition, String column, Object val) { return matchPhrasePrefixQuery(condition, column, val, DEFAULT_MAX_EXPANSIONS, DEFAULT_BOOST); } + /** + * 前缀匹配 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children matchPhrasePrefixQuery(String column, Object val, Float boost) { return matchPhrasePrefixQuery(true, column, val, DEFAULT_MAX_EXPANSIONS, boost); } + /** + * 前缀匹配 + * + * @param column 列名 字符串 + * @param val 值 + * @param maxExpansions 最大扩展数 + * @return wrapper + */ default Children matchPhrasePrefixQuery(String column, Object val, int maxExpansions) { return matchPhrasePrefixQuery(true, column, val, maxExpansions, DEFAULT_BOOST); } + /** + * 前缀匹配 + * + * @param column 列名 字符串 + * @param val 值 + * @param maxExpansions 最大扩展数 + * @param boost 权重 + * @return wrapper + */ default Children matchPhrasePrefixQuery(String column, Object val, int maxExpansions, Float boost) { return matchPhrasePrefixQuery(true, column, val, maxExpansions, boost); } + /** + * 前缀匹配 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param maxExpansions 最大扩展数 + * @param boost 权重 + * @return wrapper + */ default Children matchPhrasePrefixQuery(boolean condition, R column, Object val, int maxExpansions, Float boost) { return matchPhrasePrefixQuery(condition, FieldUtils.getFieldName(column), val, maxExpansions, boost); } @@ -355,79 +784,241 @@ public interface Compare extends Serializable { */ Children matchPhrasePrefixQuery(boolean condition, String column, Object val, int maxExpansions, Float boost); - + /** + * 多字段匹配 + * + * @param val 值 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, R... columns) { return multiMatchQuery(true, val, columns); } + /** + * 多字段匹配 + * + * @param condition 执行条件 + * @param val 值 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(boolean condition, Object val, R... columns) { return multiMatchQuery(condition, val, Operator.OR, DEFAULT_MIN_SHOULD_MATCH, DEFAULT_BOOST, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Float boost, R... columns) { return multiMatchQuery(true, val, Operator.OR, DEFAULT_MIN_SHOULD_MATCH, boost, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, int minimumShouldMatch, R... columns) { return multiMatchQuery(true, val, Operator.OR, minimumShouldMatch, DEFAULT_BOOST, columns); } + /** + * 多字段匹配 + * + * @param val + * @param operator 操作类型 or and + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Operator operator, int minimumShouldMatch, R... columns) { return multiMatchQuery(true, val, operator, minimumShouldMatch, DEFAULT_BOOST, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param operator 操作类型 or and + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Operator operator, R... columns) { return multiMatchQuery(true, val, operator, DEFAULT_MIN_SHOULD_MATCH, DEFAULT_BOOST, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, int minimumShouldMatch, Float boost, R... columns) { return multiMatchQuery(true, val, Operator.OR, minimumShouldMatch, boost, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param operator 操作类型 or and + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Operator operator, Float boost, R... columns) { return multiMatchQuery(true, val, operator, DEFAULT_MIN_SHOULD_MATCH, boost, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param operator 操作类型 or and + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Operator operator, int minimumShouldMatch, Float boost, R... columns) { return multiMatchQuery(true, val, operator, minimumShouldMatch, boost, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, String... columns) { return multiMatchQuery(true, val, columns); } + /** + * 多字段匹配 + * + * @param condition 执行条件 + * @param val 值 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(boolean condition, Object val, String... columns) { return multiMatchQuery(condition, val, Operator.OR, DEFAULT_MIN_SHOULD_MATCH, DEFAULT_BOOST, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Float boost, String... columns) { return multiMatchQuery(true, val, Operator.OR, DEFAULT_MIN_SHOULD_MATCH, boost, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, int minimumShouldMatch, String... columns) { return multiMatchQuery(true, val, Operator.OR, minimumShouldMatch, DEFAULT_BOOST, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param operator 操作类型 or and + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Operator operator, int minimumShouldMatch, String... columns) { return multiMatchQuery(true, val, operator, minimumShouldMatch, DEFAULT_BOOST, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param operator 操作类型 or and + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Operator operator, String... columns) { return multiMatchQuery(true, val, operator, DEFAULT_MIN_SHOULD_MATCH, DEFAULT_BOOST, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, int minimumShouldMatch, Float boost, String... columns) { return multiMatchQuery(true, val, Operator.OR, minimumShouldMatch, boost, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param operator 操作类型 or and + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Operator operator, Float boost, String... columns) { return multiMatchQuery(true, val, operator, DEFAULT_MIN_SHOULD_MATCH, boost, columns); } + /** + * 多字段匹配 + * + * @param val 值 + * @param operator 操作类型 or and + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(Object val, Operator operator, int minimumShouldMatch, Float boost, String... columns) { return multiMatchQuery(true, val, operator, minimumShouldMatch, boost, columns); } + /** + * 多字段匹配 + * + * @param condition 执行条件 + * @param val 值 + * @param operator 操作类型 or and + * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% + * @param boost 权重 + * @param columns 列 + * @return wrapper + */ default Children multiMatchQuery(boolean condition, Object val, Operator operator, int minimumShouldMatch, Float boost, R... columns) { String[] fields = Arrays.stream(columns).map(FieldUtils::getFieldName).toArray(String[]::new); return multiMatchQuery(condition, val, operator, minimumShouldMatch, boost, fields); @@ -442,54 +1033,120 @@ public interface Compare extends Serializable { * @param columns 字段列表 * @param operator 操作类型 or and * @param minimumShouldMatch 最小匹配度 百分比 比如传60 代表60% - * @return 泛型 + * @return wrapper */ Children multiMatchQuery(boolean condition, Object val, Operator operator, int minimumShouldMatch, Float boost, String... columns); - + /** + * 字符串搜索 + * + * @param queryString 查询条件字符串 + * @return wrapper + */ default Children queryStringQuery(String queryString) { return queryStringQuery(true, queryString, DEFAULT_BOOST); } + /** + * 字符串搜索 + * + * @param queryString 查询条件字符串 + * @param boost 权重 + * @return wrapper + */ default Children queryStringQuery(String queryString, Float boost) { return queryStringQuery(true, queryString, boost); } /** - * 所有字段中搜索 + * 字符串搜索 * * @param condition 条件 - * @param queryString 查询内容 + * @param queryString 查询条件字符串 * @param boost 权重值 - * @return 泛型 + * @return wrapper */ Children queryStringQuery(boolean condition, String queryString, Float boost); - + /** + * 前缀匹配搜索 + * + * @param column 列 + * @param prefix 前缀 + * @return wrapper + */ default Children prefixQuery(R column, String prefix) { return prefixQuery(true, column, prefix); } + /** + * 前缀匹配搜索 + * + * @param condition 执行条件 + * @param column 列 + * @param prefix 前缀 + * @return wrapper + */ default Children prefixQuery(boolean condition, R column, String prefix) { return prefixQuery(true, column, prefix, DEFAULT_BOOST); } + /** + * 前缀匹配搜索 + * + * @param column 列 + * @param prefix 前缀 + * @param boost 权重 + * @return wrapper + */ default Children prefixQuery(R column, String prefix, Float boost) { return prefixQuery(true, column, prefix, boost); } + /** + * 前缀匹配搜索 + * + * @param column 列名 字符串 + * @param prefix 前缀 + * @return wrapper + */ default Children prefixQuery(String column, String prefix) { return prefixQuery(true, column, prefix); } + /** + * 前缀匹配搜索 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param prefix 前缀 + * @return wrapper + */ default Children prefixQuery(boolean condition, String column, String prefix) { return prefixQuery(true, column, prefix, DEFAULT_BOOST); } + /** + * 前缀匹配搜索 + * + * @param column 列名 字符串 + * @param prefix 前缀 + * @param boost 权重 + * @return wrapper + */ default Children prefixQuery(String column, String prefix, Float boost) { return prefixQuery(true, column, prefix, boost); } + /** + * 前缀匹配搜索 + * + * @param condition 执行条件 + * @param column 列 + * @param prefix 前缀 + * @param boost 权重 + * @return wrapper + */ default Children prefixQuery(boolean condition, R column, String prefix, Float boost) { return prefixQuery(condition, FieldUtils.getFieldName(column), prefix, boost); } @@ -498,62 +1155,194 @@ public interface Compare extends Serializable { * 前缀匹配搜索 * * @param condition 条件 - * @param column 列 + * @param column 列名 字符串 * @param prefix 前缀 * @param boost 权重值 - * @return 泛型 + * @return wrapper */ Children prefixQuery(boolean condition, String column, String prefix, Float boost); + /** + * 大于 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children gt(R column, Object val) { return gt(true, column, val); } + /** + * 大于 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children gt(R column, Object val, Float boost) { return gt(true, column, val, boost); } + /** + * 大于 + * + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children gt(R column, Object val, ZoneId timeZone, String format) { return gt(true, column, val, timeZone, format, DEFAULT_BOOST); } + /** + * 大于 + * + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children gt(R column, Object val, ZoneId timeZone, String format, Float boost) { return gt(true, column, val, timeZone, format, boost); } + /** + * 大于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children gt(boolean condition, R column, Object val) { return gt(condition, column, val, DEFAULT_BOOST); } - + /** + * 大于 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children gt(String column, Object val) { return gt(true, column, val); } + /** + * 大于 + * + * @param column 列名 字符串 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children gt(String column, Object val, ZoneId timeZone, String format) { return gt(true, column, val, timeZone, format, DEFAULT_BOOST); } + /** + * 大于 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children gt(String column, Object val, Float boost) { return gt(true, column, val, boost); } + /** + * 大于 + * + * @param column 列名 字符串 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children gt(String column, Object val, ZoneId timeZone, String format, Float boost) { return gt(true, column, val, timeZone, format, boost); } + /** + * 大于 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children gt(boolean condition, String column, Object val) { return gt(condition, column, val, DEFAULT_BOOST); } + /** + * 大于 + * + * @param condition + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children gt(boolean condition, R column, Object val, Float boost) { return gt(condition, FieldUtils.getFieldName(column), val, boost); } + /** + * 大于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children gt(boolean condition, R column, Object val, ZoneId timeZone, String format, Float boost) { return gt(condition, FieldUtils.getFieldName(column), val, timeZone, format, boost); } + /** + * 大于 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children gt(boolean condition, String column, Object val, Float boost) { return gt(condition, column, val, null, null, boost); } @@ -576,51 +1365,168 @@ public interface Compare extends Serializable { */ Children gt(boolean condition, String column, Object val, ZoneId timeZone, String format, Float boost); - + /** + * 大于等于 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children ge(R column, Object val) { return ge(true, column, val); } + /** + * 大于等于 + * + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children ge(R column, Object val, ZoneId timeZone, String format) { return ge(true, FieldUtils.getFieldName(column), val, timeZone, format, DEFAULT_BOOST); } + /** + * 大于等于 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children ge(R column, Object val, Float boost) { return ge(true, column, val, boost); } + /** + * 大于等于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children ge(boolean condition, R column, Object val) { return ge(condition, column, val, DEFAULT_BOOST); } + /** + * 大于等于 + * + * @param column 列名 字符串 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children ge(String column, Object val, ZoneId timeZone, String format) { return ge(true, column, val, timeZone, format, DEFAULT_BOOST); } + /** + * 大于等于 + * + * @param column 列名 字符串 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children ge(String column, Object val, ZoneId timeZone, String format, Float boost) { return ge(true, column, val, timeZone, format, boost); } + /** + * 大于等于 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children ge(String column, Object val) { return ge(true, column, val); } + /** + * 大于等于 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children ge(String column, Object val, Float boost) { return ge(true, column, val, boost); } + /** + * 大于等于 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children ge(boolean condition, String column, Object val) { return ge(condition, column, val, DEFAULT_BOOST); } + /** + * 大于等于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children ge(boolean condition, R column, Object val, Float boost) { return ge(condition, FieldUtils.getFieldName(column), val, boost); } + /** + * 大于等于 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children ge(boolean condition, String column, Object val, Float boost) { return ge(condition, column, val, null, null, boost); } + /** + * 大于等于 + * + * @param condition 执行条件 + * @param column 列名 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children ge(boolean condition, String column, Object val, ZoneId timeZone, String format) { return ge(condition, column, val, timeZone, format, DEFAULT_BOOST); } @@ -638,60 +1544,192 @@ public interface Compare extends Serializable { * 如果:未设置:取es mapper format格式; * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" * @param boost 权重 - * @return 泛型 - * @author 其中时区和format由社区dazer007贡献 + * @return wrapper */ Children ge(boolean condition, String column, Object val, ZoneId timeZone, String format, Float boost); - + /** + * 小于 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children lt(R column, Object val) { return lt(true, column, val); } + /** + * 小于 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children lt(R column, Object val, Float boost) { return lt(true, column, val, boost); } + /** + * 小于 + * + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children lt(R column, Object val, ZoneId timeZone, String format) { return lt(true, column, val, timeZone, format, null); } + /** + * 小于 + * + * @param column 列名 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children lt(R column, Object val, ZoneId timeZone, String format, Float boost) { return lt(true, column, val, timeZone, format, boost); } + /** + * 小于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children lt(boolean condition, R column, Object val) { return lt(condition, column, val, DEFAULT_BOOST); } + /** + * 小于 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children lt(String column, Object val) { return lt(true, column, val); } + /** + * 小于 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children lt(String column, Object val, Float boost) { return lt(true, column, val, boost); } + /** + * 小于 + * + * @param column 列名 字符串 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children lt(String column, Object val, ZoneId timeZone, String format, Float boost) { return lt(true, column, val, timeZone, format, boost); } + /** + * 小于 + * + * @param condition 条件 + * @param column 列名 + * @param val 值 + * @return wrapper + */ default Children lt(boolean condition, String column, Object val) { return lt(condition, column, val, DEFAULT_BOOST); } + /** + * 小于 + * + * @param condition 条件 + * @param column 列名 祝福词 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children lt(boolean condition, String column, Object val, Float boost) { return lt(condition, column, val, null, null, boost); } + /** + * 小于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children lt(boolean condition, R column, Object val, Float boost) { return lt(condition, FieldUtils.getFieldName(column), val, null, null, boost); } + /** + * 小于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children lt(boolean condition, R column, Object val, ZoneId timeZone, String format) { return lt(condition, FieldUtils.getFieldName(column), val, timeZone, format, DEFAULT_BOOST); } + /** + * 小于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children lt(boolean condition, R column, Object val, ZoneId timeZone, String format, Float boost) { return lt(condition, FieldUtils.getFieldName(column), val, timeZone, format, boost); } @@ -709,68 +1747,227 @@ public interface Compare extends Serializable { * 如果:未设置:取es mapper format格式; * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" * @param boost 权重 - * @return 泛型 - * @author 其中时区和format由社区dazer007贡献 + * @return wrapper */ Children lt(boolean condition, String column, Object val, ZoneId timeZone, String format, Float boost); - + /** + * 小于等于 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children le(R column, Object val) { return le(true, column, val); } + /** + * 小于等于 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children le(R column, Object val, Float boost) { return le(true, column, val, boost); } + /** + * 小于等于 + * + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children le(R column, Object val, ZoneId timeZone, String format) { return le(true, FieldUtils.getFieldName(column), val, timeZone, format, DEFAULT_BOOST); } + /** + * 小于等于 + * + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper` + */ default Children le(R column, Object val, ZoneId timeZone, String format, Float boost) { return le(true, FieldUtils.getFieldName(column), val, timeZone, format, boost); } + /** + * 小于等于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children le(boolean condition, R column, Object val) { return le(condition, column, val, DEFAULT_BOOST); } + /** + * 小于等于 + * + * @param condition 条件 + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children le(boolean condition, R column, Object val, ZoneId timeZone, String format) { return le(condition, FieldUtils.getFieldName(column), val, timeZone, format, DEFAULT_BOOST); } + /** + * 小于等于 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children le(String column, Object val) { return le(true, column, val); } + /** + * 小于等于 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children le(String column, Object val, Float boost) { return le(true, column, val, boost); } + /** + * 小于等于 + * + * @param column 列名 字符串 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children le(String column, Object val, ZoneId timeZone, String format) { return le(true, column, val, timeZone, format, DEFAULT_BOOST); } + /** + * 小于等于 + * + * @param column 列名 字符串 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children le(String column, Object val, ZoneId timeZone, String format, Float boost) { return le(true, column, val, timeZone, format, boost); } + /** + * 小于等于 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children le(boolean condition, String column, Object val) { return le(condition, column, val, DEFAULT_BOOST); } + /** + * 小于等于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children le(boolean condition, R column, Object val, Float boost) { return le(condition, FieldUtils.getFieldName(column), val, boost); } + /** + * 小于等于 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children le(boolean condition, R column, Object val, ZoneId timeZone, String format, Float boost) { return le(condition, FieldUtils.getFieldName(column), val, timeZone, format, boost); } + /** + * 小于等于 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children le(boolean condition, String column, Object val, Float boost) { return le(condition, column, val, null, null, boost); } + /** + * 小于等于 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children le(boolean condition, String column, Object val, ZoneId timeZone, String format) { return le(condition, column, val, timeZone, format, null); } @@ -788,63 +1985,193 @@ public interface Compare extends Serializable { * 如果:未设置:取es mapper format格式; * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" * @param boost 权重 - * @return 泛型 - * @author 其中时区和format由社区dazer007贡献 + * @return wrapper */ Children le(boolean condition, String column, Object val, ZoneId timeZone, String format, Float boost); - + /** + * between区间 + * + * @param column 列 + * @param from 左区间 + * @param to 右区间 + * @return wrapper + */ default Children between(R column, Object from, Object to) { return between(true, column, from, to); } + /** + * between 区间 + * + * @param column 列 + * @param from 左区间 + * @param to 右区间 + * @param boost 权重 + * @return wrapper + */ default Children between(R column, Object from, Object to, Float boost) { return between(true, column, from, to, boost); } + /** + * between 区间 + * + * @param column 列 + * @param from 左区间 + * @param to 右区间 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children between(R column, Object from, Object to, ZoneId timeZone, String format) { return between(true, column, from, to, timeZone, format, DEFAULT_BOOST); } + /** + * betwenn 区间 + * + * @param column 列 + * @param from 左区间 + * @param to 右区间 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children between(R column, Object from, Object to, ZoneId timeZone, String format, Float boost) { return between(true, column, from, to, timeZone, format, boost); } + /** + * between 区间 + * + * @param condition 执行条件 + * @param column 列 + * @param from 左区间 + * @param to 右区间 + * @return wrapper + */ default Children between(boolean condition, R column, Object from, Object to) { return between(condition, column, from, to, DEFAULT_BOOST); } + /** + * between 区间 + * + * @param column 列名 字符串 + * @param from 左区间 + * @param to 右区间 + * @return wrapper + */ default Children between(String column, Object from, Object to) { return between(true, column, from, to); } + /** + * between 区间 + * + * @param column 列名 字符串 + * @param from 左区间 + * @param to 右区间 + * @param boost 权重 + * @return wrapper + */ default Children between(String column, Object from, Object to, Float boost) { return between(true, column, from, to, boost); } + /** + * between 区间 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param from 左区间 + * @param to 右区间 + * @return wrapper + */ default Children between(boolean condition, String column, Object from, Object to) { return between(condition, column, from, to, DEFAULT_BOOST); } + /** + * between 区间 + * + * @param condition 执行条件 + * @param column 列 + * @param from 左区间 + * @param to 右区间 + * @param boost 权重 + * @return wrapper + */ default Children between(boolean condition, R column, Object from, Object to, Float boost) { return between(condition, FieldUtils.getFieldName(column), from, to, boost); } + /** + * between 区间 + * + * @param condition 执行条件 + * @param column 列 + * @param from 左区间 + * @param to 右区间 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @return wrapper + */ default Children between(boolean condition, R column, Object from, Object to, ZoneId timeZone, String format) { return between(condition, FieldUtils.getFieldName(column), from, to, timeZone, format, DEFAULT_BOOST); } + /** + * between 区间 + * + * @param condition 执行条件 + * @param column 列 + * @param from 左区间 + * @param to 右区间 + * @param timeZone 时区 不设置为:UTC(0时区);val中包含时区,timeZone设置无效 + * @param format 日期字符串格式 + * 如1:val是Date、java.time中对象,使用:"yyyy-MM-dd'T'HH:mm:ss.SSSz"、 + * 如2:val是String,需要保证format格式和,val字符串格式相同,如:format="yyyy-MM-dd HH:mm:ss" 对应:val="2019-01-01 12:00:00" + * 如果:未设置:取es mapper format格式; + * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" + * @param boost 权重 + * @return wrapper + */ default Children between(boolean condition, R column, Object from, Object to, ZoneId timeZone, String format, Float boost) { return between(condition, FieldUtils.getFieldName(column), from, to, timeZone, format, boost); } + /** + * between 区间 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param from 左区间 + * @param to 右区间 + * @param boost 权重 + * @return wrapper + */ default Children between(boolean condition, String column, Object from, Object to, Float boost) { return between(condition, column, from, to, null, null, boost); } /** - * BETWEEN 值1 AND 值2 + * between 区间 * * @param condition 条件 * @param column 列 @@ -857,35 +2184,89 @@ public interface Compare extends Serializable { * 如果:未设置:取es mapper format格式; * es mapper format未设置,则es内置默认格式为:"strict_date_optional_time||epoch_millis" * @param boost 权重 - * @return 泛型 - * @author 其中时区和format由社区dazer007贡献 + * @return wrapper */ Children between(boolean condition, String column, Object from, Object to, ZoneId timeZone, String format, Float boost); + /** + * like 左右皆模糊 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children like(R column, Object val) { return like(true, column, val); } + /** + * like 左右皆模糊 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children like(R column, Object val, Float boost) { return like(true, column, val, boost); } + /** + * like 左右皆模糊 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children like(boolean condition, R column, Object val) { return like(condition, column, val, DEFAULT_BOOST); } + /** + * like 左右皆模糊 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children like(String column, Object val) { return like(true, column, val); } + /** + * like 左右皆模糊 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children like(String column, Object val, Float boost) { return like(true, column, val, boost); } + /** + * like 左右皆模糊 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children like(boolean condition, String column, Object val) { return like(condition, column, val, DEFAULT_BOOST); } + /** + * like 左右皆模糊 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children like(boolean condition, R column, Object val, Float boost) { return like(condition, FieldUtils.getFieldName(column), val, boost); } @@ -901,23 +2282,61 @@ public interface Compare extends Serializable { */ Children like(boolean condition, String column, Object val, Float boost); - + /** + * LIKE左模糊 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children likeLeft(R column, Object val) { return likeLeft(true, column, val, DEFAULT_BOOST); } + /** + * LIKE左模糊 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children likeLeft(R column, Object val, Float boost) { return likeLeft(true, column, val, boost); } + /** + * LIKE左模糊 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children likeLeft(String column, Object val) { return likeLeft(true, column, val, DEFAULT_BOOST); } + /** + * LIKE左模糊 + * + * @param column 列名 祝福词 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children likeLeft(String column, Object val, Float boost) { return likeLeft(true, column, val, boost); } + /** + * LIKE左模糊 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children likeLeft(boolean condition, R column, Object val, Float boost) { return likeLeft(condition, FieldUtils.getFieldName(column), val, boost); } @@ -933,23 +2352,61 @@ public interface Compare extends Serializable { */ Children likeLeft(boolean condition, String column, Object val, Float boost); - + /** + * LIKE右模糊 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children likeRight(R column, Object val) { return likeRight(true, column, val, DEFAULT_BOOST); } + /** + * LIKE右模糊 + * + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children likeRight(R column, Object val, Float boost) { return likeRight(true, column, val, boost); } + /** + * LIKE右模糊 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children likeRight(String column, Object val) { return likeRight(true, column, val, DEFAULT_BOOST); } + /** + * LIKE右模糊 + * + * @param column 列名 字符串 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children likeRight(String column, Object val, Float boost) { return likeRight(true, column, val, boost); } + /** + * LIKE右模糊 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @param boost 权重 + * @return wrapper + */ default Children likeRight(boolean condition, R column, Object val, Float boost) { return likeRight(condition, FieldUtils.getFieldName(column), val, boost); } @@ -961,7 +2418,7 @@ public interface Compare extends Serializable { * @param column 列 * @param val 值 * @param boost 权重 - * @return 泛型 + * @return wrapper */ Children likeRight(boolean condition, String column, Object val, Float boost); } diff --git a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Func.java b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Func.java index d1d215be..e26c6f6c 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Func.java +++ b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Func.java @@ -22,55 +22,138 @@ import static java.util.stream.Collectors.toList; **/ @SuppressWarnings("unchecked") public interface Func extends Serializable { - + /** + * 升序排列 + * + * @param column 列 + * @return wrapper + */ default Children orderByAsc(R column) { return orderByAsc(true, column); } + /** + * 升序排列 + * + * @param columns 列 + * @return wrapper + */ default Children orderByAsc(R... columns) { return orderByAsc(true, columns); } + /** + * 升序排列 + * + * @param condition 执行条件 + * @param columns 列 + * @return wrapper + */ default Children orderByAsc(boolean condition, R... columns) { return orderBy(condition, true, columns); } + /** + * 降序排列 + * + * @param column 列 + * @return wrapper + */ default Children orderByDesc(R column) { return orderByDesc(true, column); } + /** + * 降序排列 + * + * @param columns 列 + * @return wrapper + */ default Children orderByDesc(R... columns) { return orderByDesc(true, columns); } + /** + * 降序排列 + * + * @param condition 执行条件 + * @param columns 列 + * @return wrapper + */ default Children orderByDesc(boolean condition, R... columns) { return orderBy(condition, false, columns); } + /** + * 升序排列 + * + * @param column 列名 字符串 + * @return wrapper + */ default Children orderByAsc(String column) { return orderByAsc(true, column); } + /** + * 升序排列 + * + * @param columns 列名 字符串 + * @return wrapper + */ default Children orderByAsc(String... columns) { return orderByAsc(true, columns); } + /** + * 升序排列 + * + * @param condition 执行条件 + * @param columns 列名 + * @return wrapper + */ default Children orderByAsc(boolean condition, String... columns) { return orderBy(condition, true, columns); } + /** + * 降序排列 + * + * @param column 列 + * @return wrapper + */ default Children orderByDesc(String column) { return orderByDesc(true, column); } + /** + * 降序排列 + * + * @param columns 列 + * @return wrapper + */ default Children orderByDesc(String... columns) { return orderByDesc(true, columns); } + /** + * 降序排列 + * + * @param condition 执行条件 + * @param columns 列 + * @return wrapper + */ default Children orderByDesc(boolean condition, String... columns) { return orderBy(condition, false, columns); } + /** + * 排序 + * + * @param condition 执行条件 + * @param isAsc 是否升序排列 + * @param columns 列 + * @return wrapper + */ default Children orderBy(boolean condition, boolean isAsc, R... columns) { String[] fields = Arrays.stream(columns).map(FieldUtils::getFieldName).toArray(String[]::new); return orderBy(condition, isAsc, fields); @@ -78,24 +161,42 @@ public interface Func extends Serializable { /** - * 排序:ORDER BY 字段, ... + * 排序 * * @param condition 条件 * @param isAsc 是否升序 是:按照升序排列,否:按照降序排列 * @param columns 列,支持多列 - * @return 泛型 + * @return wrapper */ Children orderBy(boolean condition, boolean isAsc, String... columns); - + /** + * 排序 + * + * @param orderByParam 排序参数 适用于排序字段和规则从前端通过字符串传入的场景 + * @return wrapper + */ default Children orderBy(OrderByParam orderByParam) { return orderBy(true, orderByParam); } + /** + * 排序 + * + * @param condition 执行条件 + * @param orderByParam 排序参数 适用于排序字段和规则从前端通过字符串传入的场景 + * @return wrapper + */ default Children orderBy(boolean condition, OrderByParam orderByParam) { return orderBy(condition, Collections.singletonList(orderByParam)); } + /** + * 排序 + * + * @param orderByParams 排序参数 适用于排序字段和规则从前端通过字符串传入的场景 + * @return wrapper + */ default Children orderBy(List orderByParams) { return orderBy(true, orderByParams); } @@ -105,70 +206,206 @@ public interface Func extends Serializable { * * @param condition 条件 * @param orderByParams 排序字段及规则参数列表 - * @return 泛型 + * @return wrapper */ Children orderBy(boolean condition, List orderByParams); + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceAsc(R column, double lat, double lon) { return orderByDistanceAsc(true, FieldUtils.getFieldName(column), DistanceUnit.KILOMETERS, GeoDistance.PLANE, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param unit 距离单位 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper` + */ default Children orderByDistanceAsc(R column, DistanceUnit unit, double lat, double lon) { return orderByDistanceAsc(true, FieldUtils.getFieldName(column), unit, GeoDistance.PLANE, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param geoDistance 距离计算方式 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper` + */ default Children orderByDistanceAsc(R column, GeoDistance geoDistance, double lat, double lon) { return orderByDistanceAsc(true, FieldUtils.getFieldName(column), DistanceUnit.KILOMETERS, geoDistance, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param unit 距离单位 + * @param geoDistance 距离计算方式 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceAsc(R column, DistanceUnit unit, GeoDistance geoDistance, double lat, double lon) { return orderByDistanceAsc(true, FieldUtils.getFieldName(column), unit, geoDistance, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceAsc(R column, GeoPoint... geoPoints) { return orderByDistanceAsc(true, FieldUtils.getFieldName(column), DistanceUnit.KILOMETERS, GeoDistance.PLANE, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param unit 距离单位 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceAsc(R column, DistanceUnit unit, GeoPoint... geoPoints) { return orderByDistanceAsc(true, FieldUtils.getFieldName(column), unit, GeoDistance.PLANE, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param geoDistance 距离计算方式 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceAsc(R column, GeoDistance geoDistance, GeoPoint... geoPoints) { return orderByDistanceAsc(true, FieldUtils.getFieldName(column), DistanceUnit.KILOMETERS, geoDistance, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param unit 距离单位 + * @param geoDistance 距离计算方式 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceAsc(R column, DistanceUnit unit, GeoDistance geoDistance, GeoPoint... geoPoints) { return orderByDistanceAsc(true, FieldUtils.getFieldName(column), unit, geoDistance, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceAsc(String column, double lat, double lon) { return orderByDistanceAsc(true, column, DistanceUnit.KILOMETERS, GeoDistance.PLANE, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param unit 距离单位 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceAsc(String column, DistanceUnit unit, double lat, double lon) { return orderByDistanceAsc(true, column, unit, GeoDistance.PLANE, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param geoDistance 距离计算方式 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceAsc(String column, GeoDistance geoDistance, double lat, double lon) { return orderByDistanceAsc(true, column, DistanceUnit.KILOMETERS, geoDistance, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param unit 距离单位 + * @param geoDistance 距离计算方式 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceAsc(String column, DistanceUnit unit, GeoDistance geoDistance, double lat, double lon) { return orderByDistanceAsc(true, column, unit, geoDistance, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceAsc(String column, GeoPoint... geoPoints) { return orderByDistanceAsc(true, column, DistanceUnit.KILOMETERS, GeoDistance.PLANE, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param unit 距离单位 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceAsc(String column, DistanceUnit unit, GeoPoint... geoPoints) { return orderByDistanceAsc(true, column, unit, GeoDistance.PLANE, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param geoDistance 距离计算方式 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceAsc(String column, GeoDistance geoDistance, GeoPoint... geoPoints) { return orderByDistanceAsc(true, column, DistanceUnit.KILOMETERS, geoDistance, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param unit 距离单位 + * @param geoDistance 距离计算方式 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceAsc(String column, DistanceUnit unit, GeoDistance geoDistance, GeoPoint... geoPoints) { return orderByDistanceAsc(true, column, unit, geoDistance, geoPoints); } @@ -176,76 +413,211 @@ public interface Func extends Serializable { /** * 地理位置坐标点由近及远排序 * - * @param condition 条件 - * @param column 列名 - * @param unit 距离单位 默认km - * @param geoDistance 计算方式,默认为GeoDistance.PLANE - * @param geoPoints 坐标点 - * @return 泛型 + * @param condition 执行条件 + * @param column 列名 字符串 + * @param unit 距离单位 重载方法默认为km + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param geoPoints 多边形坐标点数组 + * @return wrapper */ Children orderByDistanceAsc(boolean condition, String column, DistanceUnit unit, GeoDistance geoDistance, GeoPoint... geoPoints); - + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceDesc(R column, double lat, double lon) { return orderByDistanceDesc(true, FieldUtils.getFieldName(column), DistanceUnit.KILOMETERS, GeoDistance.PLANE, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param unit 距离单位 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceDesc(R column, DistanceUnit unit, double lat, double lon) { return orderByDistanceDesc(true, FieldUtils.getFieldName(column), unit, GeoDistance.PLANE, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceDesc(R column, GeoDistance geoDistance, double lat, double lon) { return orderByDistanceDesc(true, FieldUtils.getFieldName(column), DistanceUnit.KILOMETERS, geoDistance, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 + * @param unit 距离单位 + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceDesc(R column, DistanceUnit unit, GeoDistance geoDistance, double lat, double lon) { return orderByDistanceDesc(true, FieldUtils.getFieldName(column), unit, geoDistance, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceDesc(R column, GeoPoint... geoPoints) { return orderByDistanceDesc(true, FieldUtils.getFieldName(column), DistanceUnit.KILOMETERS, GeoDistance.PLANE, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param unit 距离单位 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceDesc(R column, DistanceUnit unit, GeoPoint... geoPoints) { return orderByDistanceDesc(true, FieldUtils.getFieldName(column), unit, GeoDistance.PLANE, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceDesc(R column, GeoDistance geoDistance, GeoPoint... geoPoints) { return orderByDistanceDesc(true, FieldUtils.getFieldName(column), DistanceUnit.KILOMETERS, geoDistance, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列 + * @param unit 距离单位 + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceDesc(R column, DistanceUnit unit, GeoDistance geoDistance, GeoPoint... geoPoints) { return orderByDistanceDesc(true, FieldUtils.getFieldName(column), unit, geoDistance, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceDesc(String column, double lat, double lon) { return orderByDistanceDesc(true, column, DistanceUnit.KILOMETERS, GeoDistance.PLANE, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param unit 距离单位 + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceDesc(String column, DistanceUnit unit, double lat, double lon) { return orderByDistanceDesc(true, column, unit, GeoDistance.PLANE, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceDesc(String column, GeoDistance geoDistance, double lat, double lon) { return orderByDistanceDesc(true, column, DistanceUnit.KILOMETERS, geoDistance, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param unit 距离单位 + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param lat 纬度 + * @param lon 经度 + * @return wrapper + */ default Children orderByDistanceDesc(String column, DistanceUnit unit, GeoDistance geoDistance, double lat, double lon) { return orderByDistanceDesc(true, column, unit, geoDistance, new GeoPoint(lat, lon)); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceDesc(String column, GeoPoint... geoPoints) { return orderByDistanceDesc(true, column, DistanceUnit.KILOMETERS, GeoDistance.PLANE, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param unit 距离单位 + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceDesc(String column, DistanceUnit unit, GeoPoint... geoPoints) { return orderByDistanceDesc(true, column, unit, GeoDistance.PLANE, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceDesc(String column, GeoDistance geoDistance, GeoPoint... geoPoints) { return orderByDistanceDesc(true, column, DistanceUnit.KILOMETERS, geoDistance, geoPoints); } + /** + * 地理位置坐标点由近及远排序 + * + * @param column 列名 字符串 + * @param unit 距离单位 + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param geoPoints 多边形坐标点数组 + * @return wrapper + */ default Children orderByDistanceDesc(String column, DistanceUnit unit, GeoDistance geoDistance, GeoPoint... geoPoints) { return orderByDistanceDesc(true, column, unit, geoDistance, geoPoints); } @@ -254,49 +626,117 @@ public interface Func extends Serializable { * 地理位置坐标点由远及近排序 * * @param condition 条件 - * @param column 列名 - * @param unit 距离单位 默认km - * @param geoDistance 计算方式,默认为GeoDistance.PLANE - * @param geoPoints 坐标点 - * @return 泛型 + * @param column 列名 字符串 + * @param unit 距离单位 重载方法默认为km + * @param geoDistance 距离计算方式,重载方法默认为GeoDistance.PLANE + * @param geoPoints 多边形坐标点数组 + * @return wrapper */ Children orderByDistanceDesc(boolean condition, String column, DistanceUnit unit, GeoDistance geoDistance, GeoPoint... geoPoints); - + /** + * 字段 IN + * + * @param column 列 + * @param coll 值 + * @return wrapper + */ default Children in(R column, Collection coll) { return in(true, column, coll); } + /** + * 字段 IN + * + * @param condition 执行条件 + * @param column 列 + * @param coll 值 + * @return wrapper + */ default Children in(boolean condition, R column, Collection coll) { return in(condition, column, coll, BaseEsConstants.DEFAULT_BOOST); } + /** + * 字段 IN + * + * @param column 列 + * @param values 值 + * @return wrapper + */ default Children in(R column, Object... values) { return in(true, column, values); } + /** + * 字段 IN + * + * @param condition 执行条件 + * @param column 列 + * @param values 值 + * @return wrapper + */ default Children in(boolean condition, R column, Object... values) { return in(condition, column, Arrays.stream(Optional.ofNullable(values).orElseGet(() -> new Object[]{})) .collect(toList())); } + /** + * 字段 IN + * + * @param column 列名 字符串 + * @param coll 值 + * @return wrapper + */ default Children in(String column, Collection coll) { return in(true, column, coll); } + /** + * 字段 IN + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param coll 值 + * @return wrapper + */ default Children in(boolean condition, String column, Collection coll) { return in(condition, column, coll, BaseEsConstants.DEFAULT_BOOST); } + /** + * 字段 IN + * + * @param column 列名 字符串 + * @param values 值 + * @return wrapper + */ default Children in(String column, Object... values) { return in(true, column, values); } + /** + * 字段 IN + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param values 值 + * @return wrapper + */ default Children in(boolean condition, String column, Object... values) { return in(condition, column, Arrays.stream(Optional.ofNullable(values).orElseGet(() -> new Object[]{})) .collect(toList())); } + /** + * 字段 IN + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param coll 值 + * @param boost 权重 + * @return wrapper + */ default Children in(boolean condition, R column, Collection coll, Float boost) { return in(condition, FieldUtils.getFieldName(column), coll, boost); } @@ -304,61 +744,129 @@ public interface Func extends Serializable { /** * 字段 IN * - * @param condition 条件 - * @param column 列 - * @param coll 集合 + * @param condition 执行条件 + * @param column 列名 字符串 + * @param coll 值 * @param boost 权重 - * @return 泛型 + * @return wrapper */ Children in(boolean condition, String column, Collection coll, Float boost); + /** + * 字段 IS NOT NULL 等价于Es中的exists查询 未废弃是为了兼容mysql用法 + * + * @param column 列 + * @return wrapper + */ default Children isNotNull(R column) { return isNotNull(true, column); } + /** + * 字段 IS NOT NULL 等价于Es中的exists查询 未废弃是为了兼容mysql用法 + * + * @param condition 执行条件 + * @param column 列 + * @return wrapper + */ default Children isNotNull(boolean condition, R column) { return isNotNull(condition, column, BaseEsConstants.DEFAULT_BOOST); } + /** + * 字段 IS NOT NULL 等价于Es中的exists查询 未废弃是为了兼容mysql用法 + * + * @param column 列名 字符串 + * @return wrapper + */ default Children isNotNull(String column) { return isNotNull(true, column); } + /** + * 字段 IS NOT NULL 等价于Es中的exists查询 未废弃是为了兼容mysql用法 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @return wrapper + */ default Children isNotNull(boolean condition, String column) { return isNotNull(condition, column, BaseEsConstants.DEFAULT_BOOST); } + /** + * 字段 IS NOT NULL 等价于Es中的exists查询 未废弃是为了兼容mysql用法 + * + * @param condition 执行条件 + * @param column 列 + * @param boost 权重 + * @return wrapper` + */ default Children isNotNull(boolean condition, R column, Float boost) { return isNotNull(condition, FieldUtils.getFieldName(column), boost); } /*** * 字段 IS NOT NULL 等价于Es中的exists查询 未废弃是为了兼容mysql用法 - * @param condition 条件 - * @param column 列 + * @param condition 执行条件 + * @param column 列名 字符串 * @param boost 权重 - * @return 泛型 + * @return wrapper */ default Children isNotNull(boolean condition, String column, Float boost) { return exists(condition, column, boost); } + /** + * 字段存在 等价于上面的isNotNull + * + * @param column 列 + * @return wrapper + */ default Children exists(R column) { return isNotNull(true, column); } + /** + * 字段存在 等价于上面的isNotNull + * + * @param condition 执行条件 + * @param column 列 + * @return wrapper + */ default Children exists(boolean condition, R column) { return isNotNull(condition, column, BaseEsConstants.DEFAULT_BOOST); } + /** + * 字段存在 等价于上面的isNotNull + * + * @param column 列名 字符串 + * @return wrapper + */ default Children exists(String column) { return isNotNull(true, column); } + /** + * 字段存在 等价于上面的isNotNull + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @return wrapper + */ default Children exists(boolean condition, String column) { return exists(condition, column, BaseEsConstants.DEFAULT_BOOST); } + /** + * 字段存在 等价于上面的isNotNull + * + * @param condition 执行条件 + * @param column 列 + * @param boost 权重 + * @return wrapper` + */ default Children exists(boolean condition, R column, Float boost) { return exists(condition, FieldUtils.getFieldName(column), boost); } @@ -366,46 +874,105 @@ public interface Func extends Serializable { /** * 字段存在 等价于上面的isNotNull * - * @param condition 条件 - * @param column 列 + * @param condition 执行条件 + * @param column 列名 字符串 * @param boost 权重 - * @return 泛型 + * @return wrapper */ Children exists(boolean condition, String column, Float boost); - + /** + * 分组:GROUP BY 字段, ... + * + * @param column 列 + * @return wrapper + */ default Children groupBy(R column) { return groupBy(true, true, column); } + /** + * 分组:GROUP BY 字段, ... + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列 + * @return wrapper + */ default Children groupBy(boolean enablePipeline, R column) { return groupBy(true, enablePipeline, column); } + /** + * 分组:GROUP BY 字段, ... + * + * @param columns 列 + * @return wrapper + */ default Children groupBy(R... columns) { return groupBy(true, true, columns); } + /** + * 分组:GROUP BY 字段, ... + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children groupBy(boolean enablePipeline, R... columns) { return groupBy(true, enablePipeline, columns); } + /** + * 分组:GROUP BY 字段, ... + * + * @param column 列名 字符串 + * @return wrapper + */ default Children groupBy(String column) { return groupBy(true, true, column); } + /** + * 分组:GROUP BY 字段, ... + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列名 字符串 + * @return wrapper + */ default Children groupBy(boolean enablePipeline, String column) { return groupBy(true, enablePipeline, column); } + /** + * 分组:GROUP BY 字段, ... + * + * @param columns 列名 字符串 + * @return wrapper + */ default Children groupBy(String... columns) { return groupBy(true, true, columns); } + /** + * 分组:GROUP BY 字段, ... + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper + */ default Children groupBy(boolean enablePipeline, String... columns) { return groupBy(true, enablePipeline, columns); } + /** + * 分组:GROUP BY 字段, ... + * + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children groupBy(boolean condition, boolean enablePipeline, R... columns) { String[] fields = Arrays.stream(columns).map(FieldUtils::getFieldName).toArray(String[]::new); return groupBy(condition, enablePipeline, fields); @@ -414,92 +981,212 @@ public interface Func extends Serializable { /** * 分组:GROUP BY 字段, ... * - * @param condition 条件 - * @param enablePipeline 是否管道聚合 - * @param columns 列,支持多列 - * @return 泛型 + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper */ Children groupBy(boolean condition, boolean enablePipeline, String... columns); + /** + * 聚合,等价于GroupBy + * + * @param column 列 + * @return wrapper + */ default Children termsAggregation(R column) { return termsAggregation(true, true, column); } + /** + * 聚合,等价于GroupBy + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列 + * @return wrapper + */ default Children termsAggregation(boolean enablePipeline, R column) { return termsAggregation(true, enablePipeline, column); } + /** + * 聚合,等价于GroupBy + * + * @param columns 列 + * @return wrapper + */ default Children termsAggregation(R... columns) { return termsAggregation(true, true, columns); } + /** + * 聚合,等价于GroupBy + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children termsAggregation(boolean enablePipeline, R... columns) { return termsAggregation(true, enablePipeline, columns); } + /** + * 聚合,等价于GroupBy + * + * @param column 列名 字符串 + * @return wrapper + */ default Children termsAggregation(String column) { return termsAggregation(true, true, column); } + /** + * 聚合,等价于GroupBy + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列名 字符串 + * @return wrapper + */ default Children termsAggregation(boolean enablePipeline, String column) { return termsAggregation(true, enablePipeline, column); } + /** + * 聚合,等价于GroupBy + * + * @param columns 列名 字符串 + * @return wrapper + */ default Children termsAggregation(String... columns) { return termsAggregation(true, true, columns); } + /** + * 聚合,等价于GroupBy + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper + */ default Children termsAggregation(boolean enablePipeline, String... columns) { return termsAggregation(true, enablePipeline, columns); } + /** + * 聚合,等价于GroupBy + * + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children termsAggregation(boolean condition, boolean enablePipeline, R... columns) { String[] fields = Arrays.stream(columns).map(FieldUtils::getFieldName).toArray(String[]::new); return termsAggregation(condition, enablePipeline, fields); } /** - * 可指定返回名称分组,相当于mysql group by + * 聚合,等价于GroupBy * - * @param condition 条件 - * @param enablePipeline 是否管道聚合 - * @param columns 列,支持多列 - * @return 泛型 + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper */ Children termsAggregation(boolean condition, boolean enablePipeline, String... columns); + /** + * 求平均值 + * + * @param column 列 + * @return wrapper + */ default Children avg(R column) { return avg(true, true, column); } + /** + * 求平均值 + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列 + * @return wrapper + */ default Children avg(boolean enablePipeline, R column) { return avg(true, enablePipeline, column); } + /** + * 求平均值 + * + * @param columns 列 + * @return wrapper + */ default Children avg(R... columns) { return avg(true, true, columns); } + /** + * 求平均值 + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children avg(boolean enablePipeline, R... columns) { return avg(true, enablePipeline, columns); } + /** + * 求平均值 + * + * @param column 列名 字符串 + * @return wrapper + */ default Children avg(String column) { return avg(true, true, column); } + /** + * 求平均值 + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列名 字符串 + * @return wrapper + */ default Children avg(boolean enablePipeline, String column) { return avg(true, enablePipeline, column); } + /** + * 求平均值 + * + * @param columns 列名 字符串 + * @return wrapper + */ default Children avg(String... columns) { return avg(true, true, columns); } + /** + * 求平均值 + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper + */ default Children avg(boolean enablePipeline, String... columns) { return avg(true, enablePipeline, columns); } + /** + * 求平均值 + * + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children avg(boolean condition, boolean enablePipeline, R... columns) { String[] fields = Arrays.stream(columns).map(FieldUtils::getFieldName).toArray(String[]::new); return avg(condition, enablePipeline, fields); @@ -508,45 +1195,105 @@ public interface Func extends Serializable { /** * 求平均值 * - * @param condition 条件 - * @param enablePipeline 是否管道聚合 - * @param columns 列,支持多列 - * @return 泛型 + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper */ Children avg(boolean condition, boolean enablePipeline, String... columns); + /** + * 求最小值 + * + * @param column 列 + * @return wrapper + */ default Children min(R column) { return min(true, true, column); } + /** + * 求最小值 + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列 + * @return wrapper + */ default Children min(boolean enablePipeline, R column) { return min(true, enablePipeline, column); } + /** + * 求最小值 + * + * @param columns 列 + * @return wrapper + */ default Children min(R... columns) { return min(true, true, columns); } + /** + * 求最小值 + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children min(boolean enablePipeline, R... columns) { return min(true, enablePipeline, columns); } + /** + * 求最小值 + * + * @param column 列名 字符串 + * @return wrapper + */ default Children min(String column) { return min(true, true, column); } + /** + * 求最小值 + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列名 字符串 + * @return wrapper + */ default Children min(boolean enablePipeline, String column) { return min(true, enablePipeline, column); } + /** + * 求最小值 + * + * @param columns 列名 字符串 + * @return wrapper + */ default Children min(String... columns) { return min(true, true, columns); } + /** + * 求最小值 + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper + */ default Children min(boolean enablePipeline, String... columns) { return min(true, enablePipeline, columns); } + /** + * 求最小值 + * + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children min(boolean condition, boolean enablePipeline, R... columns) { String[] fields = Arrays.stream(columns).map(FieldUtils::getFieldName).toArray(String[]::new); return min(condition, enablePipeline, fields); @@ -555,45 +1302,105 @@ public interface Func extends Serializable { /** * 求最小值 * - * @param condition 条件 - * @param enablePipeline 是否管道聚合 - * @param columns 列,支持多列 - * @return 泛型 + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper */ Children min(boolean condition, boolean enablePipeline, String... columns); + /** + * 求最大值 + * + * @param column 列 + * @return wrapper + */ default Children max(R column) { return max(true, true, column); } + /** + * 求最大值 + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列 + * @return wrapper + */ default Children max(boolean enablePipeline, R column) { return max(true, enablePipeline, column); } + /** + * 求最大值 + * + * @param columns 列 + * @return wrapper + */ default Children max(R... columns) { return max(true, true, columns); } + /** + * 求最大值 + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children max(boolean enablePipeline, R... columns) { return max(true, enablePipeline, columns); } + /** + * 求最大值 + * + * @param column 列名 字符串 + * @return wrapper + */ default Children max(String column) { return max(true, true, column); } + /** + * 求最大值 + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列名 字符串 + * @return wrapper + */ default Children max(boolean enablePipeline, String column) { return max(true, enablePipeline, column); } + /** + * 求最大值 + * + * @param columns 列名 字符串 + * @return wrapper + */ default Children max(String... columns) { return max(true, true, columns); } + /** + * 求最大值 + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper + */ default Children max(boolean enablePipeline, String... columns) { return max(true, enablePipeline, columns); } + /** + * 求最大值 + * + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children max(boolean condition, boolean enablePipeline, R... columns) { String[] fields = Arrays.stream(columns).map(FieldUtils::getFieldName).toArray(String[]::new); return max(condition, enablePipeline, fields); @@ -602,45 +1409,105 @@ public interface Func extends Serializable { /** * 求最大值 * - * @param condition 条件 - * @param enablePipeline 是否管道聚合 - * @param columns 列,支持多列 - * @return 泛型 + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper */ Children max(boolean condition, boolean enablePipeline, String... columns); + /** + * 求和 + * + * @param column 列 + * @return wrapper + */ default Children sum(R column) { return sum(true, true, column); } + /** + * 求和 + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列 + * @return wrapper + */ default Children sum(boolean enablePipeline, R column) { return sum(true, enablePipeline, column); } + /** + * 求和 + * + * @param columns 列 + * @return wrapper + */ default Children sum(R... columns) { return sum(true, true, columns); } + /** + * 求和 + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children sum(boolean enablePipeline, R... columns) { return sum(true, enablePipeline, columns); } + /** + * 求和 + * + * @param column 列名 字符串 + * @return wrapper 是否开启管道聚合 + */ default Children sum(String column) { return sum(true, true, column); } + /** + * 求和 + * + * @param enablePipeline 是否开启管道聚合 + * @param column 列名 字符串 + * @return wrapper + */ default Children sum(boolean enablePipeline, String column) { return sum(true, enablePipeline, column); } + /** + * 求和 + * + * @param columns 列名 字符串 + * @return wrapper + */ default Children sum(String... columns) { return sum(true, true, columns); } + /** + * 求和 + * + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper + */ default Children sum(boolean enablePipeline, String... columns) { return sum(true, enablePipeline, columns); } + /** + * 求和 + * + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列 + * @return wrapper + */ default Children sum(boolean condition, boolean enablePipeline, R... columns) { String[] fields = Arrays.stream(columns).map(FieldUtils::getFieldName).toArray(String[]::new); return sum(condition, enablePipeline, fields); @@ -649,34 +1516,47 @@ public interface Func extends Serializable { /** * 求和 * - * @param condition 条件 - * @param enablePipeline 是否管道聚合 - * @param columns 列,支持多列 - * @return 泛型 + * @param condition 执行条件 + * @param enablePipeline 是否开启管道聚合 + * @param columns 列名 字符串 + * @return wrapper */ Children sum(boolean condition, boolean enablePipeline, String... columns); + /** + * 用户自定义原生排序器 + * + * @param sortBuilder 原生排序器 + * @return wrapper + */ default Children sort(SortBuilder sortBuilder) { return sort(true, sortBuilder); } + /** + * 用户自定义原生排序器 + * + * @param condition 执行条件 + * @param sortBuilder 原生排序器 + * @return wrapper + */ default Children sort(boolean condition, SortBuilder sortBuilder) { return sort(condition, Collections.singletonList(sortBuilder)); } /** - * 用户自定义排序 + * 用户自定义原生排序器 * - * @param condition 条件 - * @param sortBuilders 排序规则列表 - * @return 泛型 + * @param condition 执行条件 + * @param sortBuilders 原生排序器列表 + * @return wrapper */ Children sort(boolean condition, List> sortBuilders); /** * 根据得分_score排序 默认为降序 得分高得在前 * - * @return 泛型 + * @return wrapper */ default Children sortByScore() { return sortByScore(true, SortOrder.DESC); @@ -685,13 +1565,19 @@ public interface Func extends Serializable { /** * 根据得分_score排序 默认为降序 得分高得在前 * - * @param condition 条件 - * @return 泛型 + * @param condition 执行条件 + * @return wrapper */ default Children sortByScore(boolean condition) { return sortByScore(condition, SortOrder.DESC); } + /** + * 根据得分_score排序 + * + * @param sortOrder 升序/降序 + * @return wrapper + */ default Children sortByScore(SortOrder sortOrder) { return sortByScore(true, sortOrder); } @@ -699,21 +1585,39 @@ public interface Func extends Serializable { /** * 根据得分_score排序 * - * @param condition 条件 + * @param condition 执行条件 * @param sortOrder 升序/降序 - * @return 泛型 + * @return wrapper */ Children sortByScore(boolean condition, SortOrder sortOrder); - + /** + * 单字段去重 + * + * @param column 列 + * @return wrapper + */ default Children distinct(R column) { return distinct(true, column); } + /** + * 单字段去重 + * + * @param column 列名 字符串 + * @return wrapper + */ default Children distinct(String column) { return distinct(true, column); } + /** + * 单字段去重 + * + * @param condition 执行条件 + * @param column 列 + * @return wrapper + */ default Children distinct(boolean condition, R column) { return distinct(condition, FieldUtils.getFieldName(column)); } @@ -721,9 +1625,9 @@ public interface Func extends Serializable { /** * 单字段去重 * - * @param condition 条件 + * @param condition 执行条件 * @param column 去重字段 - * @return 泛型 + * @return wrapper */ Children distinct(boolean condition, String column); @@ -732,7 +1636,7 @@ public interface Func extends Serializable { * 从第几条数据开始查询 * * @param from 起始 - * @return 泛型 + * @return wrapper */ Children from(Integer from); @@ -740,7 +1644,7 @@ public interface Func extends Serializable { * 总共查询多少条数据 * * @param size 查询多少条 - * @return 泛型 + * @return wrapper */ Children size(Integer size); @@ -748,7 +1652,7 @@ public interface Func extends Serializable { * 兼容MySQL语法 作用同size * * @param n 查询条数 - * @return 泛型 + * @return wrapper */ Children limit(Integer n); @@ -757,7 +1661,7 @@ public interface Func extends Serializable { * * @param m offset偏移量,从第几条开始取,作用同from * @param n 查询条数,作用同size - * @return 泛型 + * @return wrapper */ Children limit(Integer m, Integer n); @@ -768,9 +1672,9 @@ public interface Func extends Serializable { /** * 用户自定义SearchSourceBuilder 用于混合查询 * - * @param condition 条件 + * @param condition 执行条件 * @param searchSourceBuilder 用户自定义的SearchSourceBuilder - * @return 泛型 + * @return wrapper */ Children setSearchSourceBuilder(boolean condition, SearchSourceBuilder searchSourceBuilder); } diff --git a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Geo.java b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Geo.java index a364a6d5..3baf816c 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Geo.java +++ b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Geo.java @@ -20,66 +20,178 @@ import static cn.easyes.common.constants.BaseEsConstants.DEFAULT_BOOST; * Copyright © 2021 xpc1024 All Rights Reserved **/ public interface Geo extends Serializable { + /** + * @param column 列 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoBoundingBox(R column, GeoPoint topLeft, GeoPoint bottomRight) { return geoBoundingBox(true, column, topLeft, bottomRight, DEFAULT_BOOST); } + /** + * 矩形内范围查询 + * + * @param condition 执行条件 + * @param column 列 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoBoundingBox(boolean condition, R column, GeoPoint topLeft, GeoPoint bottomRight) { return geoBoundingBox(condition, column, topLeft, bottomRight, DEFAULT_BOOST); } + /** + * 矩形内范围查询 + * + * @param column 列 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoBoundingBox(R column, GeoPoint topLeft, GeoPoint bottomRight, Float boost) { return geoBoundingBox(true, column, topLeft, bottomRight, boost); } + /** + * 矩形内范围查询 + * + * @param column 列名 字符串 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoBoundingBox(R column, String topLeft, String bottomRight) { GeoPoint topLeftGeoPoint = new GeoPoint(topLeft); GeoPoint bottomRightGeoPoint = new GeoPoint(bottomRight); return geoBoundingBox(true, column, topLeftGeoPoint, bottomRightGeoPoint, DEFAULT_BOOST); } + /** + * 矩形内范围查询 + * + * @param condition 执行条件 + * @param column 列 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoBoundingBox(boolean condition, R column, String topLeft, String bottomRight) { GeoPoint topLeftGeoPoint = new GeoPoint(topLeft); GeoPoint bottomRightGeoPoint = new GeoPoint(bottomRight); return geoBoundingBox(condition, column, topLeftGeoPoint, bottomRightGeoPoint, DEFAULT_BOOST); } + /** + * 矩形内范围查询 + * + * @param column 列 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoBoundingBox(R column, String topLeft, String bottomRight, Float boost) { GeoPoint topLeftGeoPoint = new GeoPoint(topLeft); GeoPoint bottomRightGeoPoint = new GeoPoint(bottomRight); return geoBoundingBox(true, column, topLeftGeoPoint, bottomRightGeoPoint, boost); } + /** + * 矩形内范围查询 + * + * @param column 列名 字符串 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoBoundingBox(String column, GeoPoint topLeft, GeoPoint bottomRight) { return geoBoundingBox(true, column, topLeft, bottomRight, DEFAULT_BOOST); } + /** + * 矩形内范围查询 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoBoundingBox(boolean condition, String column, GeoPoint topLeft, GeoPoint bottomRight) { return geoBoundingBox(condition, column, topLeft, bottomRight, DEFAULT_BOOST); } + /** + * 矩形内范围查询 + * + * @param column 列名 字符串 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoBoundingBox(String column, GeoPoint topLeft, GeoPoint bottomRight, Float boost) { return geoBoundingBox(true, column, topLeft, bottomRight, boost); } + /** + * 矩形内范围查询 + * + * @param column 列名 字符串 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoBoundingBox(String column, String topLeft, String bottomRight) { GeoPoint topLeftGeoPoint = new GeoPoint(topLeft); GeoPoint bottomRightGeoPoint = new GeoPoint(bottomRight); return geoBoundingBox(true, column, topLeftGeoPoint, bottomRightGeoPoint, DEFAULT_BOOST); } + /** + * 矩形内范围查询 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoBoundingBox(boolean condition, String column, String topLeft, String bottomRight) { GeoPoint topLeftGeoPoint = new GeoPoint(topLeft); GeoPoint bottomRightGeoPoint = new GeoPoint(bottomRight); return geoBoundingBox(condition, column, topLeftGeoPoint, bottomRightGeoPoint, DEFAULT_BOOST); } + /** + * 矩形内范围查询 + * + * @param column 列名 字符串 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoBoundingBox(String column, String topLeft, String bottomRight, Float boost) { GeoPoint topLeftGeoPoint = new GeoPoint(topLeft); GeoPoint bottomRightGeoPoint = new GeoPoint(bottomRight); return geoBoundingBox(true, column, topLeftGeoPoint, bottomRightGeoPoint, boost); } + /** + * 矩形内范围查询 + * + * @param condition 执行条件 + * @param column 列 + * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoBoundingBox(boolean condition, R column, GeoPoint topLeft, GeoPoint bottomRight, Float boost) { return geoBoundingBox(condition, FieldUtils.getFieldName(column), topLeft, bottomRight, boost); } @@ -87,79 +199,224 @@ public interface Geo extends Serializable { /** * 矩形内范围查询 * - * @param condition 条件 - * @param column 列 + * @param condition 执行条件 + * @param column 列名 字符串 * @param topLeft 左上点坐标 GeoPoint/字符串/哈希/wkt均支持 * @param bottomRight 右下点坐标 GeoPoint/字符串/哈希/wkt均支持 * @param boost 权重值 - * @return 泛型 + * @return wrapper */ Children geoBoundingBox(boolean condition, String column, GeoPoint topLeft, GeoPoint bottomRight, Float boost); + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(R column, Double distance, GeoPoint centralGeoPoint) { return geoDistance(true, column, distance, DistanceUnit.KILOMETERS, centralGeoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(R column, Double distance, DistanceUnit distanceUnit, GeoPoint centralGeoPoint) { return geoDistance(true, column, distance, distanceUnit, centralGeoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(R column, Double distance, DistanceUnit distanceUnit, GeoPoint centralGeoPoint, Float boost) { return geoDistance(true, column, distance, distanceUnit, centralGeoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(R column, Double distance, DistanceUnit distanceUnit, String centralGeoPoint) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(true, column, distance, distanceUnit, geoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param condition 执行条件 + * @param column 列 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(boolean condition, R column, Double distance, DistanceUnit distanceUnit, String centralGeoPoint) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(condition, column, distance, distanceUnit, geoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(R column, Double distance, DistanceUnit distanceUnit, String centralGeoPoint, Float boost) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(true, column, distance, distanceUnit, geoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param condition 执行条件 + * @param column 列 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(boolean condition, R column, Double distance, DistanceUnit distanceUnit, String centralGeoPoint, Float boost) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(condition, column, distance, distanceUnit, geoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(String column, Double distance, GeoPoint centralGeoPoint) { return geoDistance(true, column, distance, DistanceUnit.KILOMETERS, centralGeoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(String column, Double distance, DistanceUnit distanceUnit, GeoPoint centralGeoPoint) { return geoDistance(true, column, distance, distanceUnit, centralGeoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(String column, Double distance, DistanceUnit distanceUnit, GeoPoint centralGeoPoint, Float boost) { return geoDistance(true, column, distance, distanceUnit, centralGeoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(String column, Double distance, DistanceUnit distanceUnit, String centralGeoPoint) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(true, column, distance, distanceUnit, geoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(boolean condition, String column, Double distance, DistanceUnit distanceUnit, String centralGeoPoint) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(condition, column, distance, distanceUnit, geoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(String column, Double distance, DistanceUnit distanceUnit, String centralGeoPoint, Float boost) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(true, column, distance, distanceUnit, geoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(boolean condition, String column, Double distance, DistanceUnit distanceUnit, String centralGeoPoint, Float boost) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(condition, column, distance, distanceUnit, geoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 + * + * @param condition 执行条件 + * @param column 列 + * @param distance 距离 + * @param distanceUnit 距离单位 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(boolean condition, R column, Double distance, DistanceUnit distanceUnit, GeoPoint centralGeoPoint, Float boost) { return geoDistance(condition, FieldUtils.getFieldName(column), distance, distanceUnit, centralGeoPoint, boost); } @@ -167,80 +424,214 @@ public interface Geo extends Serializable { /** * 距离范围查询 以给定圆心和半径范围查询 距离类型为双精度 * - * @param condition 条件 - * @param column 列 + * @param condition 执行条件 + * @param column 列名 字符串 * @param distance 距离 * @param distanceUnit 距离单位 * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 * @param boost 权重值 - * @return 泛型 + * @return wrapper */ Children geoDistance(boolean condition, String column, Double distance, DistanceUnit distanceUnit, GeoPoint centralGeoPoint, Float boost); + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(R column, String distance, GeoPoint centralGeoPoint) { return geoDistance(true, column, distance, centralGeoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param condition 执行条件 + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(boolean condition, R column, String distance, GeoPoint centralGeoPoint) { return geoDistance(condition, column, distance, centralGeoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(R column, String distance, GeoPoint centralGeoPoint, Float boost) { return geoDistance(true, column, distance, centralGeoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(R column, String distance, String centralGeoPoint) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(true, column, distance, geoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param condition 执行条件 + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(boolean condition, R column, String distance, String centralGeoPoint) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(condition, column, distance, geoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(R column, String distance, String centralGeoPoint, Float boost) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(true, column, distance, geoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param condition 执行条件 + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(boolean condition, R column, String distance, String centralGeoPoint, Float boost) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(condition, column, distance, geoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(String column, String distance, GeoPoint centralGeoPoint) { return geoDistance(true, column, distance, centralGeoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(boolean condition, String column, String distance, GeoPoint centralGeoPoint) { return geoDistance(condition, column, distance, centralGeoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(String column, String distance, GeoPoint centralGeoPoint, Float boost) { return geoDistance(true, column, distance, centralGeoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(String column, String distance, String centralGeoPoint) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(true, column, distance, geoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @return wrapper + */ default Children geoDistance(boolean condition, String column, String distance, String centralGeoPoint) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(condition, column, distance, geoPoint, DEFAULT_BOOST); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param column 列名 字符串 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(String column, String distance, String centralGeoPoint, Float boost) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(true, column, distance, geoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(boolean condition, String column, String distance, String centralGeoPoint, Float boost) { GeoPoint geoPoint = new GeoPoint(centralGeoPoint); return geoDistance(condition, column, distance, geoPoint, boost); } + /** + * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 + * + * @param condition 执行条件 + * @param column 列 + * @param distance 距离 + * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 + * @return wrapper + */ default Children geoDistance(boolean condition, R column, String distance, GeoPoint centralGeoPoint, Float boost) { return geoDistance(condition, FieldUtils.getFieldName(column), distance, centralGeoPoint, boost); } @@ -248,28 +639,57 @@ public interface Geo extends Serializable { /** * 距离范围查询 以给定圆心和半径范围查询 距离类型为字符串 * - * @param condition 条件 - * @param column 列 + * @param condition 执行条件 执行条件 + * @param column 列名 字符串 列 * @param distance 距离 * @param centralGeoPoint 中心点 GeoPoint/字符串/哈希/wkt均支持 - * @param boost 权重 - * @return 泛型 + * @param boost 权重值 权重 + * @return wrapper wrapper */ Children geoDistance(boolean condition, String column, String distance, GeoPoint centralGeoPoint, Float boost); - + /** + * 不规则多边形范围查询 + * + * @param column 列 + * @param geoPoints 多边形顶点列表 + * @return wrapper + */ default Children geoPolygon(R column, List geoPoints) { return geoPolygon(true, column, geoPoints, DEFAULT_BOOST); } + /** + * 不规则多边形范围查询 + * + * @param condition 执行条件 + * @param column 列 + * @param geoPoints 多边形顶点列表 + * @return wrapper + */ default Children geoPolygon(boolean condition, R column, List geoPoints) { return geoPolygon(condition, column, geoPoints, DEFAULT_BOOST); } + /** + * 不规则多边形范围查询 + * + * @param column 列 + * @param geoPoints 多边形顶点列表 + * @param boost 权重值 + * @return wrapper + */ default Children geoPolygon(R column, List geoPoints, Float boost) { return geoPolygon(true, column, geoPoints, boost); } + /** + * 不规则多边形范围查询 + * + * @param column 列 + * @param strPoints wkt字符串多边形 + * @return wrapper + */ default Children geoPolygonStr(R column, List strPoints) { if (CollectionUtils.isEmpty(strPoints)) { throw ExceptionUtils.eee("polygon point list must not be empty"); @@ -278,6 +698,14 @@ public interface Geo extends Serializable { return geoPolygon(true, column, geoPoints, DEFAULT_BOOST); } + /** + * 不规则多边形范围查询 + * + * @param condition 执行条件 + * @param column 列 + * @param strPoints wkt字符串多边形 + * @return wrapper + */ default Children geoPolygonStr(boolean condition, R column, List strPoints) { if (CollectionUtils.isEmpty(strPoints)) { throw ExceptionUtils.eee("polygon point list must not be empty"); @@ -286,6 +714,14 @@ public interface Geo extends Serializable { return geoPolygon(condition, column, geoPoints, DEFAULT_BOOST); } + /** + * 不规则多边形范围查询 + * + * @param column 列 + * @param strPoints wkt字符串多边形 + * @param boost 权重值 + * @return wrapper + */ default Children geoPolygonStr(R column, List strPoints, Float boost) { if (CollectionUtils.isEmpty(strPoints)) { throw ExceptionUtils.eee("polygon point list must not be empty"); @@ -294,18 +730,48 @@ public interface Geo extends Serializable { return geoPolygon(true, column, geoPoints, boost); } + /** + * 不规则多边形范围查询 + * + * @param column 列名 字符串 + * @param geoPoints 多边形顶点列表 + * @return wrapper + */ default Children geoPolygon(String column, List geoPoints) { return geoPolygon(true, column, geoPoints, DEFAULT_BOOST); } + /** + * 不规则多边形范围查询 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param geoPoints 多边形顶点列表 + * @return wrapper + */ default Children geoPolygon(boolean condition, String column, List geoPoints) { return geoPolygon(condition, column, geoPoints, DEFAULT_BOOST); } + /** + * 不规则多边形范围查询 + * + * @param column 列名 字符串 + * @param geoPoints 多边形顶点列表 + * @param boost 权重值 + * @return wrapper + */ default Children geoPolygon(String column, List geoPoints, Float boost) { return geoPolygon(true, column, geoPoints, boost); } + /** + * 不规则多边形范围查询 + * + * @param column 列名 字符串 + * @param strPoints wkt字符串多边形 + * @return wrapper + */ default Children geoPolygonStr(String column, List strPoints) { if (CollectionUtils.isEmpty(strPoints)) { throw ExceptionUtils.eee("polygon point list must not be empty"); @@ -314,6 +780,14 @@ public interface Geo extends Serializable { return geoPolygon(true, column, geoPoints, DEFAULT_BOOST); } + /** + * 不规则多边形范围查询 + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param strPoints wkt字符串多边形 + * @return wrapper + */ default Children geoPolygonStr(boolean condition, String column, List strPoints) { if (CollectionUtils.isEmpty(strPoints)) { throw ExceptionUtils.eee("polygon point list must not be empty"); @@ -322,6 +796,14 @@ public interface Geo extends Serializable { return geoPolygon(condition, column, geoPoints, DEFAULT_BOOST); } + /** + * 不规则多边形范围查询 + * + * @param column 列名 字符串 + * @param strPoints wkt字符串多边形 + * @param boost 权重值 + * @return wrapper + */ default Children geoPolygonStr(String column, List strPoints, Float boost) { if (CollectionUtils.isEmpty(strPoints)) { throw ExceptionUtils.eee("polygon point list must not be empty"); @@ -330,6 +812,15 @@ public interface Geo extends Serializable { return geoPolygon(true, column, geoPoints, boost); } + /** + * 不规则多边形范围查询 + * + * @param condition 执行条件 + * @param column 列 + * @param geoPoints 多边形顶点列表 + * @param boost 权重值 + * @return wrapper + */ default Children geoPolygon(boolean condition, R column, List geoPoints, Float boost) { return geoPolygon(condition, FieldUtils.getFieldName(column), geoPoints, boost); } @@ -337,40 +828,94 @@ public interface Geo extends Serializable { /** * 不规则多边形范围查询 * - * @param condition 条件 - * @param column 列 - * @param geoPoints 多边形顶点列表 GeoPoint/字符串/哈希/wkt均支持 - * @param boost 权重值 - * @return 泛型 + * @param condition 执行条件 执行条件 + * @param column 列名 字符串 列 + * @param geoPoints 多边形顶点列表 多边形顶点列表 GeoPoint/字符串/哈希/wkt均支持 + * @param boost 权重值 权重值 + * @return wrapper wrapper */ Children geoPolygon(boolean condition, String column, List geoPoints, Float boost); - + /** + * 图形GeoShape查询 已知被索引的图形id + * + * @param column 列 + * @param indexedShapeId 已被索引的图形id + * @return wrapper + */ default Children geoShape(R column, String indexedShapeId) { return geoShape(true, column, indexedShapeId, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 已知被索引的图形id + * + * @param column 列 + * @param indexedShapeId 已被索引的图形id + * @param boost 权重值 + * @return wrapper + */ default Children geoShape(R column, String indexedShapeId, Float boost) { return geoShape(true, column, indexedShapeId, boost); } + /** + * 图形GeoShape查询 已知被索引的图形id + * + * @param condition 执行条件 + * @param column 列 + * @param indexedShapeId 已被索引的图形id + * @return wrapper + */ default Children geoShape(boolean condition, R column, String indexedShapeId) { return geoShape(condition, column, indexedShapeId, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 已知被索引的图形id + * + * @param column 列名 字符串 + * @param indexedShapeId 已被索引的图形id + * @return wrapper + */ default Children geoShape(String column, String indexedShapeId) { return geoShape(true, column, indexedShapeId, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 已知被索引的图形id + * + * @param column 列名 字符串 + * @param indexedShapeId 已被索引的图形id + * @param boost 权重值 + * @return wrapper + */ default Children geoShape(String column, String indexedShapeId, Float boost) { return geoShape(true, column, indexedShapeId, boost); } + /** + * 图形GeoShape查询 已知被索引的图形id + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param indexedShapeId 已被索引的图形id + * @return wrapper + */ default Children geoShape(boolean condition, String column, String indexedShapeId) { return geoShape(condition, column, indexedShapeId, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 已知被索引的图形id + * + * @param condition 执行条件 + * @param column 列 + * @param indexedShapeId 已被索引的图形id + * @param boost 权重值 + * @return wrapper + */ default Children geoShape(boolean condition, R column, String indexedShapeId, Float boost) { return geoShape(condition, FieldUtils.getFieldName(column), indexedShapeId, boost); } @@ -379,47 +924,122 @@ public interface Geo extends Serializable { /** * 图形GeoShape查询 已知被索引的图形id * - * @param condition 条件 - * @param column 列 + * @param condition 执行条件 + * @param column 列名 字符串 * @param indexedShapeId 已被索引的图形id * @param boost 权重值 - * @return 泛型 + * @return wrapper */ Children geoShape(boolean condition, String column, String indexedShapeId, Float boost); - + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param column 列名 字符串 + * @param geometry 图形 + * @return wrapper + */ default Children geoShape(R column, Geometry geometry) { return geoShape(true, column, geometry, ShapeRelation.WITHIN, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param column 列名 字符串 + * @param geometry 图形 + * @param shapeRelation 图形关系(可参考ShapeRelation枚举) + * @return wrapper + */ default Children geoShape(R column, Geometry geometry, ShapeRelation shapeRelation) { return geoShape(true, column, geometry, shapeRelation, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param geometry 图形 + * @param shapeRelation 图形关系(可参考ShapeRelation枚举) + * @return wrapper + */ default Children geoShape(boolean condition, R column, Geometry geometry, ShapeRelation shapeRelation) { return geoShape(condition, column, geometry, shapeRelation, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param column 列名 字符串 + * @param geometry 图形 + * @param shapeRelation 图形关系(可参考ShapeRelation枚举) + * @param boost 权重值 + * @return wrapper + */ default Children geoShape(R column, Geometry geometry, ShapeRelation shapeRelation, Float boost) { return geoShape(true, column, geometry, shapeRelation, boost); } + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param column 列名 字符串 + * @param geometry 图形 + * @return wrapper + */ default Children geoShape(String column, Geometry geometry) { return geoShape(true, column, geometry, ShapeRelation.WITHIN, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param column 列名 字符串 + * @param geometry 图形 + * @param shapeRelation 图形关系(可参考ShapeRelation枚举) + * @return wrapper + */ default Children geoShape(String column, Geometry geometry, ShapeRelation shapeRelation) { return geoShape(true, column, geometry, shapeRelation, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param geometry 图形 + * @param shapeRelation 图形关系(可参考ShapeRelation枚举) + * @return wrapper + */ default Children geoShape(boolean condition, String column, Geometry geometry, ShapeRelation shapeRelation) { return geoShape(condition, column, geometry, shapeRelation, DEFAULT_BOOST); } + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param column 列名 字符串 + * @param geometry 图形 + * @param shapeRelation 图形关系(可参考ShapeRelation枚举) + * @param boost 权重值 + * @return wrapper + */ default Children geoShape(String column, Geometry geometry, ShapeRelation shapeRelation, Float boost) { return geoShape(true, column, geometry, shapeRelation, boost); } + /** + * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) + * + * @param condition 执行条件 + * @param column 列名 字符串 + * @param geometry 图形 + * @param shapeRelation 图形关系(可参考ShapeRelation枚举) + * @param boost 权重值 + * @return wrapper + */ default Children geoShape(boolean condition, R column, Geometry geometry, ShapeRelation shapeRelation, Float boost) { return geoShape(condition, FieldUtils.getFieldName(column), geometry, shapeRelation, boost); } @@ -427,12 +1047,12 @@ public interface Geo extends Serializable { /** * 图形GeoShape查询 用户指定图形(Point,MultiPoint,Line,MultiLine,Circle,LineaRing,Polygon,MultiPolygon,Rectangle) * - * @param condition 条件 - * @param column 列 + * @param condition 执行条件 执行条件 + * @param column 列名 字符串 列 * @param geometry 图形 * @param shapeRelation 图形关系(可参考ShapeRelation枚举) - * @param boost 权重值 - * @return 泛型 + * @param boost 权重值 权重值 + * @return wrapper wrapper */ Children geoShape(boolean condition, String column, Geometry geometry, ShapeRelation shapeRelation, Float boost); } diff --git a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Index.java b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Index.java index def3d4bc..b1b470a6 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Index.java +++ b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Index.java @@ -17,7 +17,7 @@ public interface Index extends Serializable { * 设置索引名称 * * @param indexNames 索引名称 - * @return 泛型 + * @return wrapper */ Children indexName(String... indexNames); @@ -25,7 +25,7 @@ public interface Index extends Serializable { * 设置最大返回数 * * @param maxResultWindow 最大返回数 - * @return 泛型 + * @return wrapper */ Children maxResultWindow(Integer maxResultWindow); @@ -34,7 +34,7 @@ public interface Index extends Serializable { * * @param shards 分片数 * @param replicas 副本数 - * @return 泛型 + * @return wrapper */ Children settings(Integer shards, Integer replicas); @@ -42,7 +42,7 @@ public interface Index extends Serializable { * 用户手动指定的settings * * @param settings settings - * @return 泛型 + * @return wrapper */ Children settings(Settings settings); @@ -50,39 +50,107 @@ public interface Index extends Serializable { * 用户自行指定mapping * * @param mapping mapping信息 - * @return 泛型 + * @return wrapper */ Children mapping(Map mapping); - + /** + * 设置mapping信息 + * + * @param column 列 + * @param fieldType es中的索引类型 + * @return wrapper + */ default Children mapping(R column, FieldType fieldType) { return mapping(column, fieldType, null, null, null, null, null); } + /** + * 设置mapping信息 + * + * @param column 列 + * @param fieldType es中的类型 + * @param fieldData 是否支持text字段聚合 + * @return wrapper + */ default Children mapping(R column, FieldType fieldType, Boolean fieldData) { return mapping(column, fieldType, null, null, null, fieldData, null); } + /** + * 设置mapping信息 + * + * @param column + * @param fieldType es中的类型 + * @param boost 权重 + * @return wrapper + */ default Children mapping(R column, FieldType fieldType, Float boost) { return mapping(column, fieldType, null, null, null, null, boost); } + /** + * 设置mapping信息 + * + * @param column 列 + * @param fieldType es中的类型 + * @param fieldData 是否支持text字段聚合 + * @param boost 权重 + * @return wrapper + */ default Children mapping(R column, FieldType fieldType, Boolean fieldData, Float boost) { return mapping(column, fieldType, null, null, null, fieldData, boost); } + /** + * 设置mapping信息 + * + * @param column 列 + * @param fieldType es中的类型 + * @param dateFormat 日期格式 + * @return wrapper + */ default Children mapping(R column, FieldType fieldType, String dateFormat) { return mapping(column, fieldType, null, null, dateFormat, null, null); } + /** + * 设置mapping信息 + * + * @param column 列 + * @param fieldType es中的类型 + * @param analyzer 索引分词器 + * @param searchAnalyzer 查询分词器 + * @return wrapper + */ default Children mapping(R column, FieldType fieldType, String analyzer, String searchAnalyzer) { return mapping(column, fieldType, analyzer, searchAnalyzer, null, null, null); } + /** + * 设置mapping信息 + * + * @param column 列 + * @param fieldType es中的类型 + * @param analyzer 索引分词器 + * @param searchAnalyzer 查询分词器 + * @param dateFormat 日期格式 + * @return wrapper + */ default Children mapping(R column, FieldType fieldType, String analyzer, String searchAnalyzer, String dateFormat) { return mapping(column, fieldType, analyzer, searchAnalyzer, dateFormat, null, null); } + /** + * 设置mapping信息 + * + * @param column 列名 + * @param fieldType es中的类型 + * @param analyzer 索引分词器 + * @param searchAnalyzer 查询分词器 + * @param boost 权重 + * @return wrapper + */ default Children mapping(R column, FieldType fieldType, String analyzer, String searchAnalyzer, Float boost) { return mapping(column, fieldType, analyzer, searchAnalyzer, null, null, boost); } @@ -97,38 +165,97 @@ public interface Index extends Serializable { * @param dateFormat 日期格式 * @param fieldData 是否支持text字段聚合 * @param boost 权重值 - * @return 泛型 + * @return wrapper */ default Children mapping(R column, FieldType fieldType, String analyzer, String searchAnalyzer, String dateFormat, Boolean fieldData, Float boost) { return mapping(FieldUtils.getFieldName(column), fieldType, analyzer, searchAnalyzer, dateFormat, fieldData, boost); } - + /** + * 设置mapping信息 + * + * @param column 列名 字符串 + * @param fieldType es中的类型 + * @return wrapper + */ default Children mapping(String column, FieldType fieldType) { return mapping(column, fieldType, null, null, null); } + /** + * 设置mapping信息 + * + * @param column 列名 字符串 + * @param fieldType es中的类型 + * @param fieldData 是否支持text字段聚合 + * @return wrapper + */ default Children mapping(String column, FieldType fieldType, Boolean fieldData) { return mapping(column, fieldType, null, null, fieldData, null); } + /** + * 设置mapping信息 + * + * @param column 列名 字符串 + * @param fieldType es中的类型 + * @param boost 权重 + * @return wrapper + */ default Children mapping(String column, FieldType fieldType, Float boost) { return mapping(column, fieldType, null, null, null, boost); } - + /** + * 设置mapping信息 + * + * @param column 列名 字符串 + * @param fieldType es中的类型 + * @param analyzer 索引分词器 + * @return wrapper + */ default Children mapping(String column, FieldType fieldType, String analyzer) { return mapping(column, fieldType, analyzer, null, null); } + /** + * 设置mapping信息 + * + * @param column 列名 字符串 + * @param fieldType es中的类型 + * @param analyzer 索引分词器 + * @param searchAnalyzer 查询分词器 + * @return wrapper + */ default Children mapping(String column, FieldType fieldType, String analyzer, String searchAnalyzer) { return mapping(column, fieldType, analyzer, searchAnalyzer, null); } + /** + * 设置mapping信息 + * + * @param column 列名 字符串 + * @param fieldType es中的类型 + * @param analyzer 索引分词器 + * @param searchAnalyzer 查询分词器 + * @param fieldData 是否支持text字段聚合 + * @return wrapper + */ default Children mapping(String column, FieldType fieldType, String analyzer, String searchAnalyzer, Boolean fieldData) { return mapping(column, fieldType, analyzer, searchAnalyzer, fieldData, null); } + /** + * 设置mapping信息 + * + * @param column 列名 字符串 + * @param fieldType es中的类型 + * @param analyzer 索引分词器类型 + * @param searchAnalyzer 查询分词器类型 + * @param fieldData 是否支持text字段聚合 + * @param boost 权重 + * @return wrapper + */ default Children mapping(String column, FieldType fieldType, String analyzer, String searchAnalyzer, Boolean fieldData, Float boost) { return mapping(column, fieldType, analyzer, searchAnalyzer, null, fieldData, boost); } @@ -137,14 +264,14 @@ public interface Index extends Serializable { /** * 设置mapping信息 * - * @param column 列名 + * @param column 列名 字符串 * @param fieldType es中的类型 - * @param analyzer 分词器类型 + * @param analyzer 索引分词器类型 * @param searchAnalyzer 查询分词器类型 * @param dateFormat 日期格式 * @param fieldData 是否支持text字段聚合 * @param boost 字段权重值 - * @return 泛型 + * @return wrapper */ Children mapping(String column, FieldType fieldType, String analyzer, String searchAnalyzer, String dateFormat, Boolean fieldData, Float boost); @@ -152,11 +279,18 @@ public interface Index extends Serializable { * 设置创建别名信息 * * @param aliasName 别名 - * @return 泛型 + * @return wrapper */ Children createAlias(String aliasName); - + /** + * 设置父子类型信息 + * + * @param column 列 + * @param parentName 父名称 + * @param childName 子名称 + * @return wrapper + */ default Children join(R column, String parentName, String childName) { return join(FieldUtils.getFieldName(childName), parentName, childName); } @@ -164,10 +298,10 @@ public interface Index extends Serializable { /** * 设置父子类型信息 * - * @param column 列名 + * @param column 列名 字符串 * @param parentName 父名称 * @param childName 子名称 - * @return 泛型 + * @return wrapper */ Children join(String column, String parentName, String childName); } diff --git a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Join.java b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Join.java index 4d0b53a3..a00b583f 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Join.java +++ b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Join.java @@ -11,7 +11,7 @@ public interface Join extends Serializable { /** * 拼接filter * - * @return 泛型 + * @return wrapper */ default Children filter() { return filter(true); @@ -20,15 +20,15 @@ public interface Join extends Serializable { /** * 拼接filter * - * @param condition 条件 - * @return 泛型 + * @param condition 执行条件 + * @return wrapper */ Children filter(boolean condition); /** * 拼接or * - * @return 泛型 + * @return wrapper */ default Children or() { return or(true); @@ -37,15 +37,15 @@ public interface Join extends Serializable { /** * 拼接 OR * - * @param condition 条件 - * @return 泛型 + * @param condition 执行条件 + * @return wrapper */ Children or(boolean condition); /** * 拼接not * - * @return 泛型 + * @return wrapper */ default Children not() { return not(true); @@ -54,8 +54,8 @@ public interface Join extends Serializable { /** * 拼接not * - * @param condition 条件 - * @return 泛型 + * @param condition 执行条件 + * @return wrapper */ Children not(boolean condition); } diff --git a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Nested.java b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Nested.java index eda4012e..03d52c9b 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Nested.java +++ b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Nested.java @@ -11,6 +11,12 @@ import java.util.function.Consumer; * Copyright © 2021 xpc1024 All Rights Reserved **/ public interface Nested extends Serializable { + /** + * AND 嵌套 保留mp用户习惯 + * + * @param consumer 嵌套条件函数 + * @return wrapper + */ default Children and(Consumer consumer) { return and(true, consumer); } @@ -19,11 +25,17 @@ public interface Nested extends Serializable { * AND 嵌套 保留mp用户习惯 * * @param condition 条件 - * @param consumer 条件函数 - * @return 泛型 + * @param consumer 嵌套条件函数 + * @return wrapper */ Children and(boolean condition, Consumer consumer); + /** + * OR 嵌套 保留mp用户习惯 + * + * @param consumer 嵌套条件函数 + * @return wrapper + */ default Children or(Consumer consumer) { return or(true, consumer); } @@ -32,11 +44,17 @@ public interface Nested extends Serializable { * OR 嵌套 保留mp用户习惯 * * @param condition 条件 - * @param consumer 条件函数 - * @return 泛型 + * @param consumer 嵌套条件函数 + * @return wrapper */ Children or(boolean condition, Consumer consumer); + /** + * must 嵌套 等价于and + * + * @param consumer 嵌套条件函数 + * @return wrapper + */ default Children must(Consumer consumer) { return must(true, consumer); } @@ -45,12 +63,17 @@ public interface Nested extends Serializable { * must 嵌套 等价于and * * @param condition 条件 - * @param consumer 条件函数 - * @return 泛型 + * @param consumer 嵌套条件函数 + * @return wrapper */ Children must(boolean condition, Consumer consumer); - + /** + * should 嵌套 等价于or + * + * @param consumer 嵌套条件函数 + * @return wrapper + */ default Children should(Consumer consumer) { return should(true, consumer); } @@ -59,11 +82,17 @@ public interface Nested extends Serializable { * should 嵌套 等价于or * * @param condition 条件 - * @param consumer 条件函数 - * @return 泛型 + * @param consumer 嵌套条件函数 + * @return wrapper */ Children should(boolean condition, Consumer consumer); + /** + * filter 嵌套 和and及must功能基本一致,但filter不返回得分,效率更高 + * + * @param consumer 嵌套条件函数 + * @return wrapper + */ default Children filter(Consumer consumer) { return filter(true, consumer); } @@ -77,40 +106,66 @@ public interface Nested extends Serializable { */ Children filter(boolean condition, Consumer consumer); - default Children mustNot(Consumer consumer) { - return mustNot(true, consumer); + /** + * must not 嵌套 等价于 must条件取反,即 非must + * + * @param consumer 嵌套条件函数 + * @return wrapper + */ + default Children not(Consumer consumer) { + return not(true, consumer); } /** * must not 嵌套 等价于 must条件取反,即 非must * * @param condition 条件 - * @param consumer 条件函数 - * @return 泛型 + * @param consumer 嵌套条件函数 + * @return wrapper */ - Children mustNot(boolean condition, Consumer consumer); - + Children not(boolean condition, Consumer consumer); + /** + * @param path 上级路径 + * @param consumer 嵌套条件函数 + * @return wrapper + */ default Children nested(String path, Consumer consumer) { return nested(true, path, consumer); } + /** + * 嵌套类型查询 + * + * @param path 上级路径 + * @param consumer 嵌套条件函数 + * @param scoreMode 得分模式 + * @return wrapper + */ default Children nested(String path, Consumer consumer, ScoreMode scoreMode) { return nested(true, path, consumer, scoreMode); } + /** + * 嵌套类型查询 + * + * @param condition 执行条件 + * @param path 上级路径 + * @param consumer 嵌套条件函数 + * @return wrapper + */ default Children nested(boolean condition, String path, Consumer consumer) { return nested(condition, path, consumer, ScoreMode.None); } /** - * 嵌套查询 + * 嵌套类型查询 * - * @param condition 条件 + * @param condition 执行条件 * @param path 上级路径 - * @param consumer 嵌套里的条件函数 - * @return 泛型 - * @author 此方法由社区开发者lym于1.x贡献,EE作者负责调整及整合至2.0 + * @param consumer 嵌套条件函数 + * @param scoreMode 得分模式 + * @return wrapper */ Children nested(boolean condition, String path, Consumer consumer, ScoreMode scoreMode); } diff --git a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Query.java b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Query.java index bfe57055..d607ec8a 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Query.java +++ b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Query.java @@ -13,11 +13,22 @@ import java.util.function.Predicate; * Copyright © 2021 xpc1024 All Rights Reserved **/ public interface Query extends Serializable { - + /** + * 设置查询字段 + * + * @param column 查询列 + * @return wrapper + */ default Children select(R column) { return select(FieldUtils.getFieldNameNotConvertId(column)); } + /** + * 设置查询字段 + * + * @param columns 查询列 + * @return wrapper + */ default Children select(R... columns) { return select(Arrays.stream(columns).map(FieldUtils::getFieldNameNotConvertId).toArray(String[]::new)); } @@ -27,7 +38,7 @@ public interface Query extends Serializable { * 设置查询字段 * * @param columns 查询列,支持多字段 - * @return 泛型 + * @return wrapper */ Children select(String... columns); @@ -35,7 +46,7 @@ public interface Query extends Serializable { * 查询字段 * * @param predicate 预言 - * @return 泛型 + * @return wrapper */ Children select(Predicate predicate); @@ -44,14 +55,26 @@ public interface Query extends Serializable { * * @param entityClass 实体类 * @param predicate 预言 - * @return 泛型 + * @return wrapper */ Children select(Class entityClass, Predicate predicate); + /** + * 设置不查询字段 + * + * @param column 不查询列 + * @return wrapper + */ default Children notSelect(R column) { return notSelect(FieldUtils.getFieldNameNotConvertId(column)); } + /** + * 设置不查询字段 + * + * @param columns 不查询列 + * @return wrapper + */ default Children notSelect(R... columns) { return notSelect(Arrays.stream(columns).map(FieldUtils::getFieldNameNotConvertId).toArray(String[]::new)); } @@ -60,14 +83,26 @@ public interface Query extends Serializable { * 设置不查询字段 * * @param columns 不查询字段,支持多字段 - * @return 泛型 + * @return wrapper */ Children notSelect(String... columns); + /** + * 设置当前操作的索引名称 + * + * @param indexName 索引名 + * @return wrapper + */ default Children index(String indexName) { return index(true, indexName); } + /** + * 设置当前操作的索引名称 + * + * @param indexNames 索引名 + * @return wrapper + */ default Children index(String... indexNames) { return index(true, indexNames); } @@ -77,7 +112,7 @@ public interface Query extends Serializable { * * @param condition 条件 * @param indexNames 索引名 - * @return 泛型 + * @return wrapper */ Children index(boolean condition, String... indexNames); diff --git a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Update.java b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Update.java index 2a802715..c69854b8 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Update.java +++ b/easy-es-core/src/main/java/cn/easyes/core/conditions/function/Update.java @@ -10,14 +10,36 @@ import java.io.Serializable; * Copyright © 2021 xpc1024 All Rights Reserved **/ public interface Update extends Serializable { + /** + * 设置 更新 字段 的 SET 片段 + * + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children set(R column, Object val) { return set(true, column, val); } + /** + * 设置 更新 字段 的 SET 片段 + * + * @param column 列名 字符串 + * @param val 值 + * @return wrapper + */ default Children set(String column, Object val) { return set(true, column, val); } + /** + * 设置 更新 字段 的 SET 片段 + * + * @param condition 执行条件 + * @param column 列 + * @param val 值 + * @return wrapper + */ default Children set(boolean condition, R column, Object val) { return set(condition, FieldUtils.getFieldName(column), val); } @@ -28,7 +50,7 @@ public interface Update extends Serializable { * @param condition 条件 * @param column 列 * @param val 值 - * @return 泛型 + * @return wrapper */ Children set(boolean condition, String column, Object val); } diff --git a/easy-es-core/src/main/java/cn/easyes/core/core/AbstractChainWrapper.java b/easy-es-core/src/main/java/cn/easyes/core/core/AbstractChainWrapper.java index f1b58173..f0a70076 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/core/AbstractChainWrapper.java +++ b/easy-es-core/src/main/java/cn/easyes/core/core/AbstractChainWrapper.java @@ -606,8 +606,8 @@ public abstract class AbstractChainWrapper consumer) { - getWrapper().mustNot(condition, consumer); + public Children not(boolean condition, Consumer consumer) { + getWrapper().not(condition, consumer); return typedThis; } diff --git a/easy-es-core/src/main/java/cn/easyes/core/core/AbstractWrapper.java b/easy-es-core/src/main/java/cn/easyes/core/core/AbstractWrapper.java index 0e5ddf42..413a41aa 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/core/AbstractWrapper.java +++ b/easy-es-core/src/main/java/cn/easyes/core/core/AbstractWrapper.java @@ -91,7 +91,7 @@ public abstract class AbstractWrapper(); aggregationParamList = new ArrayList<>(); paramQueue = new LinkedList<>(); - prevQueryType = AND_MUST; + prevQueryType = NESTED_AND; parentIdQueue = new LinkedList<>(); prevQueryTypeQueue = new LinkedList<>(); } @@ -125,12 +125,12 @@ public abstract class AbstractWrapper consumer) { - return addNested(condition, AND_MUST, consumer); + return addNested(condition, NESTED_AND, consumer); } @Override public Children or(boolean condition, Consumer consumer) { - return addNested(condition, OR_SHOULD, consumer); + return addNested(condition, NESTED_OR, consumer); } @Override @@ -139,7 +139,7 @@ public abstract class AbstractWrapper= 0; i--) { Param param = paramQueue.get(i); if (Objects.equals(level, param.getLevel())) { - param.setPrevQueryType(OR_SHOULD); + param.setPrevQueryType(NESTED_OR); break; } } @@ -148,17 +148,17 @@ public abstract class AbstractWrapper consumer) { - return addNested(condition, AND_MUST, consumer); + return addNested(condition, NESTED_AND, consumer); } @Override public Children should(boolean condition, Consumer consumer) { - return addNested(condition, OR_SHOULD, consumer); + return addNested(condition, NESTED_OR, consumer); } @Override public Children filter(boolean condition, Consumer consumer) { - return addNested(condition, AND_FILTER, consumer); + return addNested(condition, NESTED_FILTER, consumer); } @Override @@ -172,8 +172,8 @@ public abstract class AbstractWrapper consumer) { - return addNested(condition, MUST_NOT, consumer); + public Children not(boolean condition, Consumer consumer) { + return addNested(condition, NESTED_NOT, consumer); } @Override @@ -701,10 +701,10 @@ public abstract class AbstractWrapper { String executeDSL(String dsl, String indexName); /** - * 标准查询 + * 混合查询 * * @param wrapper 条件 * @return es标准结果 diff --git a/easy-es-core/src/main/java/cn/easyes/core/core/WrapperProcessor.java b/easy-es-core/src/main/java/cn/easyes/core/core/WrapperProcessor.java index d93ffd22..dba5beb8 100644 --- a/easy-es-core/src/main/java/cn/easyes/core/core/WrapperProcessor.java +++ b/easy-es-core/src/main/java/cn/easyes/core/core/WrapperProcessor.java @@ -234,10 +234,10 @@ public class WrapperProcessor { setBool(bool, queryBuilder, param.getPrevQueryType()); break; // 下面五种嵌套类型 需要对孩子节点递归处理 - case AND_MUST: - case AND_FILTER: - case MUST_NOT: - case OR_SHOULD: + case NESTED_AND: + case NESTED_FILTER: + case NESTED_NOT: + case NESTED_OR: queryBuilder = getBool(children, QueryBuilders.boolQuery(), entityInfo, null); setBool(bool, queryBuilder, param.getPrevQueryType()); break; @@ -262,13 +262,13 @@ public class WrapperProcessor { * @param parentType 查询类型 */ private static void setBool(BoolQueryBuilder bool, QueryBuilder queryBuilder, EsQueryTypeEnum parentType) { - if (AND_MUST.equals(parentType)) { + if (NESTED_AND.equals(parentType)) { bool.must(queryBuilder); - } else if (OR_SHOULD.equals(parentType)) { + } else if (NESTED_OR.equals(parentType)) { bool.should(queryBuilder); - } else if (AND_FILTER.equals(parentType)) { + } else if (NESTED_FILTER.equals(parentType)) { bool.filter(queryBuilder); - } else if (MUST_NOT.equals(parentType)) { + } else if (NESTED_NOT.equals(parentType)) { bool.mustNot(queryBuilder); } else { // by default diff --git a/easy-es-sample/src/main/resources/application.yml b/easy-es-sample/src/main/resources/application.yml index 11120b89..4781db3f 100644 --- a/easy-es-sample/src/main/resources/application.yml +++ b/easy-es-sample/src/main/resources/application.yml @@ -11,7 +11,7 @@ easy-es: print-dsl: false db-config: map-underscore-to-camel-case: true - # table-prefix: dev_ + table-prefix: dev_ id-type: customize field-strategy: not_empty refresh-policy: immediate diff --git a/easy-es-test/src/main/java/cn/easyes/test/entity/Document.java b/easy-es-test/src/main/java/cn/easyes/test/entity/Document.java index 31527735..00406d34 100644 --- a/easy-es-test/src/main/java/cn/easyes/test/entity/Document.java +++ b/easy-es-test/src/main/java/cn/easyes/test/entity/Document.java @@ -46,6 +46,11 @@ public class Document { */ @IndexField(fieldType = FieldType.TEXT, fieldData = true) private String filedData; + /** + * ip字段 + */ + @IndexField(fieldType = FieldType.IP) + private String ipAddress; /** * 创建时间 */ diff --git a/easy-es-test/src/main/java/cn/easyes/test/entity/Faq.java b/easy-es-test/src/main/java/cn/easyes/test/entity/Faq.java index 0e449036..529a2768 100644 --- a/easy-es-test/src/main/java/cn/easyes/test/entity/Faq.java +++ b/easy-es-test/src/main/java/cn/easyes/test/entity/Faq.java @@ -26,7 +26,6 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor public class Faq { - @IndexField(value = "faq_name", fieldType = FieldType.TEXT) private String faqName; @IndexField(value = "answer") private String faqAnswer; diff --git a/easy-es-test/src/test/java/cn/easyes/test/all/AllTest.java b/easy-es-test/src/test/java/cn/easyes/test/all/AllTest.java index 3363e31c..972f1aad 100644 --- a/easy-es-test/src/test/java/cn/easyes/test/all/AllTest.java +++ b/easy-es-test/src/test/java/cn/easyes/test/all/AllTest.java @@ -66,6 +66,7 @@ public class AllTest { document.setTitle("测试文档1"); document.setContent("测试内容1"); document.setCreator("老汉1"); + document.setIpAddress("192.168.1.1"); document.setLocation("40.171975,116.587105"); document.setGmtCreate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); document.setCustomField("自定义字段1"); @@ -187,6 +188,7 @@ public class AllTest { @Order(6) public void testSelectOne() { LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.match(Document::getContent, "内容") .orderByAsc(Document::getStarNum, Document::getEsId) .limit(1); @@ -226,6 +228,15 @@ public class AllTest { Assertions.assertEquals(22, documents.size()); } + @Test + @Order(6) + public void testIp(){ + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.eq(Document::getIpAddress,"192.168.0.0/16"); + List documents = documentMapper.selectList(wrapper); + Assertions.assertEquals(documents.size(),1); + } + @Test @Order(6) public void testSelectCount() { @@ -525,10 +536,10 @@ public class AllTest { @Test @Order(6) - public void testConditionMustNot() { + public void testConditionNot() { LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); wrapper.in(Document::getStarNum, 10,11,12,13) - .mustNot(i->i.eq(Document::getTitle,"测试文档10").eq(Document::getTitle,"测试文档11")); + .not(i->i.eq(Document::getTitle,"测试文档10").eq(Document::getTitle,"测试文档11")); List documents = documentMapper.selectList(wrapper); Assertions.assertEquals(2, documents.size()); } @@ -876,7 +887,7 @@ public class AllTest { @Order(9) public void testComplex() { // SQL写法 - // where business_type = 1 and (state = 9 or (state = 8 and bidding_sign = 1)) or business_type = 2 and state in (2,3) + // where business_type = 1 and (state = 9 or (state = 8 and bidding_sign = 1)) or (business_type = 2 and state in (2,3)) // RestHighLevelClient写法 List values = Arrays.asList(2, 3); diff --git a/easy-es-test/src/test/java/cn/easyes/test/mix/MixTest.java b/easy-es-test/src/test/java/cn/easyes/test/mix/MixTest.java new file mode 100644 index 00000000..ed726c1e --- /dev/null +++ b/easy-es-test/src/test/java/cn/easyes/test/mix/MixTest.java @@ -0,0 +1,162 @@ +package cn.easyes.test.mix; + +import cn.easyes.core.conditions.select.LambdaEsQueryWrapper; +import cn.easyes.test.TestEasyEsApplication; +import cn.easyes.test.entity.Document; +import cn.easyes.test.mapper.DocumentMapper; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.core.TimeValue; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.script.Script; +import org.elasticsearch.search.aggregations.AggregationBuilder; +import org.elasticsearch.search.aggregations.AggregationBuilders; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.elasticsearch.search.sort.ScriptSortBuilder; +import org.elasticsearch.search.sort.SortBuilders; +import org.elasticsearch.search.sort.SortOrder; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 混合查询几种使用案例 + * + * @ProductName: Hundsun HEP + * @ProjectName: easy-es + * @Package: cn.easyes.test.mix + * @Description: note + * @Author: xingpc37977 + * @Date: 2023/3/13 10:48 + * @UpdateUser: xingpc37977 + * @UpdateDate: 2023/3/13 10:48 + * @UpdateRemark: The modified content + * @Version: 1.0 + *

+ * Copyright © 2023 Hundsun Technologies Inc. All Rights Reserved + **/ +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +@SpringBootTest(classes = TestEasyEsApplication.class) +public class MixTest { + @Resource + private DocumentMapper documentMapper; + + /** + * 混合查询正确使用姿势1: EE提供的功能不支持某些过细粒度的功能,所有查询条件通过原生语法构造,仅利用EE提供的数据解析功能 + */ + @Test + public void testMix1() { + // RestHighLevelClient原生语法 + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(QueryBuilders.matchQuery("content", "推*").minimumShouldMatch("80%")); + + // 仅利用EE查询并解析数据功能 + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.setSearchSourceBuilder(searchSourceBuilder); + List documents = documentMapper.selectList(wrapper); + System.out.println(documents); + } + + + /** + * 混合查询正确使用姿势2: 其它都能支持,仅排序器不支持,这种情况可以只按ES原生语法构造所需排序器SortBuilder,其它用EE完成 + */ + @Test + public void testMix2() { + // EE满足的语法 + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.eq(Document::getTitle, "老汉") + .match(Document::getContent, "推*"); + + // RestHighLevelClient原生语法 + Script script = new Script("doc['star_num'].value"); + ScriptSortBuilder scriptSortBuilder = SortBuilders.scriptSort(script, ScriptSortBuilder.ScriptSortType.NUMBER).order(SortOrder.DESC); + + // 利用EE查询并解析数据 + wrapper.sort(scriptSortBuilder); + List documents = documentMapper.selectList(wrapper); + System.out.println(documents); + } + + /** + * 混合查询正确使用姿势3: 其它功能都能支持,但需要向SearchSourceBuilder中追加非query参数 + */ + @Test + public void testMix3() { + // EE满足的语法 + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.eq(Document::getTitle, "老汉") + .match(Document::getContent, "推*"); + SearchSourceBuilder searchSourceBuilder = documentMapper.getSearchSourceBuilder(wrapper); + + // 追加或者设置一些SearchSourceBuilder支持但EE暂不支持的参数 不建议追加query参数,因为如果追加query参数会直接覆盖上面EE已经帮你生成好的query,以最后set的query为准 + searchSourceBuilder.timeout(TimeValue.timeValueSeconds(3L)); + wrapper.setSearchSourceBuilder(searchSourceBuilder); + List documents = documentMapper.selectList(wrapper); + System.out.println(documents); + } + + + /** + * 查询条件中可以利用大多数基本查询,但EE提供的聚合功能不能满足需求的情况下,需要自定义聚合器 + */ + @Test + public void textMix4() { + // EE满足的语法 + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.eq(Document::getTitle, "老汉") + .match(Document::getContent, "推*"); + SearchSourceBuilder searchSourceBuilder = documentMapper.getSearchSourceBuilder(wrapper); + + // RestHighLevelClient原生语法 + AggregationBuilder aggregation = AggregationBuilders.terms("titleAgg") + .field("title"); + searchSourceBuilder.aggregation(aggregation); + wrapper.setSearchSourceBuilder(searchSourceBuilder); + SearchResponse searchResponse = documentMapper.search(wrapper); + // tip: 聚合后的信息是动态的,框架无法解析,需要用户根据聚合器类型自行从桶中解析,参考RestHighLevelClient官方Aggregation解析文档 + } + + + /** + * 不支持的混合查询1: 追加覆盖问题 + */ + @Test + public void textNotSupportMix() { + // EE满足的语法 + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.eq(Document::getTitle, "老汉") + .match(Document::getContent, "推*"); + SearchSourceBuilder searchSourceBuilder = documentMapper.getSearchSourceBuilder(wrapper); + + // 用户又想在上面的基础上,再追加一些个性化的查询参数进去 但实际上此时执行查询时,查询条件仅仅是最后设置的title=隔壁老王,前面的老汉推*会被覆盖 + searchSourceBuilder.query(QueryBuilders.matchQuery("title", "隔壁老王")); + wrapper.setSearchSourceBuilder(searchSourceBuilder); + List documents = documentMapper.selectList(wrapper); + System.out.println(documents); + // 思考: 为什么会被覆盖? 因为目前技术上做不到,查询树已经建立好了,es底层并没有提供向树的指定层级上继续追加查询条件的API + } + + /** + * 不支持的混合查询2: 脱裤子放P 自欺欺人系列 + */ + @Test + public void testNotSupportMix2() { + // EE满足的语法 + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.eq(Document::getTitle, "老汉") + .match(Document::getContent, "推*"); + + // SearchSourceBuilder的构造是自己new出来的,不是通过mapper.getSearchSourceBuilder(wrapper)构造 相当于脱裤子放P,那么上面的查询条件老汉推*自然不会生效 + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.minScore(10.5f); + wrapper.setSearchSourceBuilder(searchSourceBuilder); + List documents = documentMapper.selectList(wrapper); + System.out.println(documents); + } + + +} diff --git a/easy-es-test/src/test/java/cn/easyes/test/nested/NestedTest.java b/easy-es-test/src/test/java/cn/easyes/test/nested/NestedTest.java index a302e9d8..d9ebb085 100644 --- a/easy-es-test/src/test/java/cn/easyes/test/nested/NestedTest.java +++ b/easy-es-test/src/test/java/cn/easyes/test/nested/NestedTest.java @@ -78,31 +78,36 @@ public class NestedTest { @Test public void testNestedMatch() { - // 嵌套查询 查询年龄等于18或8,且密码等于123的数据 + // 嵌套查询 查询年龄等于18或8,且密码等于12345的数据 LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); wrapper.nested(FieldUtils.val(Document::getUsers), w -> - w.in(FieldUtils.val(User::getAge), 18, 8) - .eq(FieldUtils.val(User::getPassword), "123")); + w.in("users.age", 8) + .eq("users.password", "12345")); List documents = documentMapper.selectList(wrapper); System.out.println(documents); // 嵌套类型中的字段获取可以用FieldUtils.val或直接传入字符串 LambdaEsQueryWrapper wrapper1 = new LambdaEsQueryWrapper<>(); - wrapper1.match(Document::getContent, "人才") - .nested("users.faqs", w -> w.eq(FieldUtils.val(Faq::getFaqAnswer), "回答4") - .match("faqName", "问题3")) - .nested("users", w -> w.between("age", 10, 19)) + wrapper1.eq(Document::getTitle,"老汉") + .nested("users.faqs", w -> w.eq("users.faqs.answer", "a4") + .match("users.faqs.faq_name", "q4")) + .nested("users", w -> w.between("users.age", 1, 30)) .match(Document::getCreator, "吃饭"); List documents1 = documentMapper.selectList(wrapper1); System.out.println(documents1); LambdaEsQueryWrapper wrapper2 = new LambdaEsQueryWrapper<>(); - wrapper2.nested("users", w -> w.in("age", 18)) + wrapper2.nested("users", w -> w.in("users.age", 18)) .or() - .nested("users.faqs", w -> w.match("faq_name", "q3")); + .nested("users.faqs", w -> w.match("users.faqs.faq_name", "q3")); List documents2 = documentMapper.selectList(wrapper2); System.out.println(documents2); + + LambdaEsQueryWrapper wrapper3 = new LambdaEsQueryWrapper<>(); + wrapper3.nested("users.faqs",w->w.match("users.faqs.faq_name", "q3").or().match("users.faqs.faq_name","q4")); + List documents3 = documentMapper.selectList(wrapper3); + System.out.println(documents3); } }