You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2017/01/18 15:57:55 UTC
incubator-unomi git commit: - Clarify past event condition matching
code - Fix issue in the property condition query builder when an operator is
not defined as we are creating the condition in the UI.
Repository: incubator-unomi
Updated Branches:
refs/heads/master e61412fc9 -> 46f035819
- Clarify past event condition matching code
- Fix issue in the property condition query builder when an operator is not defined as we are creating the condition in the UI.
Signed-off-by: Serge Huber <sh...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/46f03581
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/46f03581
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/46f03581
Branch: refs/heads/master
Commit: 46f035819465df16c47e67b87f50eb4a5bf1e805
Parents: e61412f
Author: Serge Huber <sh...@apache.org>
Authored: Wed Jan 18 16:57:40 2017 +0100
Committer: Serge Huber <sh...@apache.org>
Committed: Wed Jan 18 16:57:40 2017 +0100
----------------------------------------------------------------------
.../PastEventConditionESQueryBuilder.java | 12 +++---
.../PropertyConditionESQueryBuilder.java | 45 ++++++++++----------
.../services/services/SegmentServiceImpl.java | 19 +++++----
3 files changed, 39 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/46f03581/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PastEventConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PastEventConditionESQueryBuilder.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PastEventConditionESQueryBuilder.java
index 84d964f..7c6217b 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PastEventConditionESQueryBuilder.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PastEventConditionESQueryBuilder.java
@@ -75,11 +75,13 @@ public class PastEventConditionESQueryBuilder implements ConditionESQueryBuilder
Integer minimumEventCount = condition.getParameter("minimumEventCount") == null ? 0 : (Integer) condition.getParameter("minimumEventCount");
Integer maximumEventCount = condition.getParameter("maximumEventCount") == null ? Integer.MAX_VALUE : (Integer) condition.getParameter("maximumEventCount");
- Map<String, Long> res = persistenceService.aggregateQuery(andCondition, new TermsAggregate("profileId"), Event.ITEM_TYPE);
- for (Map.Entry<String, Long> entry : res.entrySet()) {
- if (!entry.getKey().startsWith("_")) {
- if (entry.getValue() >= minimumEventCount && entry.getValue() <= maximumEventCount) {
- ids.add(entry.getKey());
+ Map<String, Long> eventCountByProfile = persistenceService.aggregateQuery(andCondition, new TermsAggregate("profileId"), Event.ITEM_TYPE);
+ if (eventCountByProfile != null) {
+ for (Map.Entry<String, Long> entry : eventCountByProfile.entrySet()) {
+ if (!entry.getKey().startsWith("_")) {
+ if (entry.getValue() >= minimumEventCount && entry.getValue() <= maximumEventCount) {
+ ids.add(entry.getKey());
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/46f03581/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
index c36722b..484c5ca 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
@@ -37,10 +37,10 @@ public class PropertyConditionESQueryBuilder implements ConditionESQueryBuilder
@Override
public QueryBuilder buildQuery(Condition condition, Map<String, Object> context, ConditionESQueryBuilderDispatcher dispatcher) {
- String op = (String) condition.getParameter("comparisonOperator");
+ String comparisonOperator = (String) condition.getParameter("comparisonOperator");
String name = (String) condition.getParameter("propertyName");
- if(op == null || name == null){
+ if(comparisonOperator == null || name == null){
throw new IllegalArgumentException("Impossible to build ES filter, condition is not valid, comparisonOperator and propertyName properties should be provided");
}
@@ -58,80 +58,79 @@ public class PropertyConditionESQueryBuilder implements ConditionESQueryBuilder
@SuppressWarnings("unchecked")
List<?> values = ObjectUtils.firstNonNull(expectedValues,expectedValuesInteger,expectedValuesDate,expectedValuesDateExpr);
- switch (op) {
+ switch (comparisonOperator) {
case "equals":
- checkRequiredValue(value, name, op, false);
+ checkRequiredValue(value, name, comparisonOperator, false);
return QueryBuilders.termQuery(name, value);
case "notEquals":
- checkRequiredValue(value, name, op, false);
+ checkRequiredValue(value, name, comparisonOperator, false);
return QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery(name, value));
case "greaterThan":
- checkRequiredValue(value, name, op, false);
+ checkRequiredValue(value, name, comparisonOperator, false);
return QueryBuilders.rangeQuery(name).gt(value);
case "greaterThanOrEqualTo":
- checkRequiredValue(value, name, op, false);
+ checkRequiredValue(value, name, comparisonOperator, false);
return QueryBuilders.rangeQuery(name).gte(value);
case "lessThan":
- checkRequiredValue(value, name, op, false);
+ checkRequiredValue(value, name, comparisonOperator, false);
return QueryBuilders.rangeQuery(name).lt(value);
case "lessThanOrEqualTo":
- checkRequiredValue(value, name, op, false);
+ checkRequiredValue(value, name, comparisonOperator, false);
return QueryBuilders.rangeQuery(name).lte(value);
case "between":
- checkRequiredValuesSize(values, name, op, 2);
+ checkRequiredValuesSize(values, name, comparisonOperator, 2);
return QueryBuilders.rangeQuery(name).gte(values.get(0)).lte(values.get(1));
case "exists":
return QueryBuilders.existsQuery(name);
case "missing":
return QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery((name)));
case "contains":
- checkRequiredValue(expectedValue, name, op, false);
+ checkRequiredValue(expectedValue, name, comparisonOperator, false);
return QueryBuilders.regexpQuery(name, ".*" + expectedValue + ".*");
case "startsWith":
- checkRequiredValue(expectedValue, name, op, false);
+ checkRequiredValue(expectedValue, name, comparisonOperator, false);
return QueryBuilders.prefixQuery(name, expectedValue);
case "endsWith":
- checkRequiredValue(expectedValue, name, op, false);
+ checkRequiredValue(expectedValue, name, comparisonOperator, false);
return QueryBuilders.regexpQuery(name, ".*" + expectedValue);
case "matchesRegex":
- checkRequiredValue(expectedValue, name, op, false);
+ checkRequiredValue(expectedValue, name, comparisonOperator, false);
return QueryBuilders.regexpQuery(name, expectedValue);
case "in":
- checkRequiredValue(values, name, op, true);
+ checkRequiredValue(values, name, comparisonOperator, true);
return QueryBuilders.termsQuery(name, values.toArray());
case "notIn":
- checkRequiredValue(values, name, op, true);
+ checkRequiredValue(values, name, comparisonOperator, true);
return QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(name, values.toArray()));
case "all":
- checkRequiredValue(values, name, op, true);
+ checkRequiredValue(values, name, comparisonOperator, true);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
for (Object curValue : values) {
boolQueryBuilder.must(QueryBuilders.termQuery(name, curValue));
}
return boolQueryBuilder;
case "hasSomeOf":
- checkRequiredValue(values, name, op, true);
+ checkRequiredValue(values, name, comparisonOperator, true);
boolQueryBuilder = QueryBuilders.boolQuery();
for (Object curValue : values) {
boolQueryBuilder.should(QueryBuilders.termQuery(name, curValue));
}
return boolQueryBuilder;
case "hasNoneOf":
- checkRequiredValue(values, name, op, true);
+ checkRequiredValue(values, name, comparisonOperator, true);
boolQueryBuilder = QueryBuilders.boolQuery();
for (Object curValue : values) {
boolQueryBuilder.mustNot(QueryBuilders.termQuery(name, curValue));
}
return boolQueryBuilder;
case "isDay":
- checkRequiredValue(value, name, op, false);
+ checkRequiredValue(value, name, comparisonOperator, false);
return getIsSameDayRange(value, name);
case "isNotDay":
- checkRequiredValue(value, name, op, false);
+ checkRequiredValue(value, name, comparisonOperator, false);
return QueryBuilders.boolQuery().mustNot(getIsSameDayRange(value, name));
- default:
- throw new IllegalArgumentException("Impossible to build ES filter, unrecognized op=" + op);
}
+ return null;
}
private void checkRequiredValuesSize(List<?> values, String name, String operator, int expectedSize) {
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/46f03581/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
----------------------------------------------------------------------
diff --git a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
index 2275d60..08f2f25 100644
--- a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
@@ -803,17 +803,18 @@ public class SegmentServiceImpl implements SegmentService, SynchronousBundleList
l.add(numberOfDaysCondition);
}
String propertyKey = (String) parentCondition.getParameter("generatedPropertyKey");
- Map<String, Long> res = persistenceService.aggregateQuery(andCondition, new TermsAggregate("profileId"), Event.ITEM_TYPE);
- for (Map.Entry<String, Long> entry : res.entrySet()) {
- if (!entry.getKey().startsWith("_")) {
- Map<String,Object> p = new HashMap<>();
- p.put(propertyKey, entry.getValue());
- Map<String,Object> p2 = new HashMap<>();
- p2.put("pastEvents",p);
+ Map<String, Long> eventCountByProfile = persistenceService.aggregateQuery(andCondition, new TermsAggregate("profileId"), Event.ITEM_TYPE);
+ for (Map.Entry<String, Long> entry : eventCountByProfile.entrySet()) {
+ String profileId = entry.getKey();
+ if (!profileId.startsWith("_")) {
+ Map<String,Long> pastEventCounts = new HashMap<>();
+ pastEventCounts.put(propertyKey, entry.getValue());
+ Map<String,Object> systemProperties = new HashMap<>();
+ systemProperties.put("pastEvents",pastEventCounts);
try {
- persistenceService.update(entry.getKey(), null, Profile.class, "systemProperties", p2);
+ persistenceService.update(profileId, null, Profile.class, "systemProperties", systemProperties);
} catch (Exception e) {
- logger.error(e.getMessage(), e);
+ logger.error("Error updating profile {} past event system properties", profileId, e);
}
}
}