Repository: incubator-unomi
Updated Branches:
  refs/heads/UNOMI-28-ES-2-X-UPGRADE [created] 131a06aa7


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/persistence-elasticsearch/core/src/main/resources/elasticsearch.yml
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/core/src/main/resources/elasticsearch.yml 
b/persistence-elasticsearch/core/src/main/resources/elasticsearch.yml
index 293f734..fe0e52f 100644
--- a/persistence-elasticsearch/core/src/main/resources/elasticsearch.yml
+++ b/persistence-elasticsearch/core/src/main/resources/elasticsearch.yml
@@ -1,269 +1,103 @@
-##################### ElasticSearch Configuration Example #####################
-
-# This file contains an overview of various configuration settings,
-# targeted at operations staff. Application developers should
-# consult the guide at <http://elasticsearch.org/guide>.
+# ======================== Elasticsearch Configuration 
=========================
 #
-# The installation procedure is covered at
-# 
<http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html>.
+# NOTE: Elasticsearch comes with reasonable defaults for most settings.
+#       Before you set out to tweak and tune the configuration, make sure you
+#       understand what are you trying to accomplish and the consequences.
 #
-# ElasticSearch comes with reasonable defaults for most settings,
-# so you can try it out without bothering with configuration.
+# The primary way of configuring a node is via this file. This template lists
+# the most important settings you may want to configure for a production 
cluster.
 #
-# Most of the time, these defaults are just fine for running a production
-# cluster. If you're fine-tuning your cluster, or wondering about the
-# effect of certain configuration option, please _do ask_ on the
-# mailing list or IRC channel [http://elasticsearch.org/community].
-
-# Any element in the configuration can be replaced with environment variables
-# by placing them in ${...} notation. For example:
+# Please see the documentation for further information on configuration 
options:
+# 
<http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
 #
-# node.rack: ${RACK_ENV_VAR}
-
-# For information on supported formats and syntax for the config file, see
-# 
<http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html>
-
-
-################################### Cluster ###################################
-
-# Cluster name identifies your cluster for auto-discovery. If you're running
-# multiple clusters on the same network, make sure you're using unique names.
+# ---------------------------------- Cluster 
-----------------------------------
 #
-# cluster.name: contextElasticSearch
-
-
-#################################### Node #####################################
-
-# Node names are generated dynamically on startup, so you're relieved
-# from configuring them manually. You can tie this node to a specific name:
-#
-# node.name: "od-fts1a"
-
-# Every node can be configured to allow or deny being eligible as the master,
-# and to allow or deny to store the data.
+# Use a descriptive name for your cluster:
 #
-# Allow this node to be eligible as a master node (enabled by default):
+# cluster.name: my-application
 #
-# node.master: true
+# ------------------------------------ Node 
------------------------------------
 #
-# Allow this node to store data (enabled by default):
+# Use a descriptive name for the node:
 #
-# node.data: true
-
-# You can exploit these settings to design advanced cluster topologies.
+# node.name: node-1
 #
-# 1. You want this node to never become a master node, only to hold data.
-#    This will be the "workhorse" of your cluster.
+# Add custom attributes to the node:
 #
-# node.master: false
-# node.data: true
+# node.rack: r1
 #
-# 2. You want this node to only serve as a master: to not store any data and
-#    to have free resources. This will be the "coordinator" of your cluster.
+# ----------------------------------- Paths 
------------------------------------
 #
-# node.master: true
-# node.data: false
+# Path to directory where to store the data (separate multiple locations by 
comma):
 #
-# 3. You want this node to be neither master nor data node, but
-#    to act as a "search load balancer" (fetching data from nodes,
-#    aggregating results, etc.)
-#
-# node.master: false
-# node.data: false
-
-# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
-# Node Info API [http://localhost:9200/_cluster/nodes] or GUI tools
-# such as <http://github.com/lukas-vlcek/bigdesk> and
-# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.
-
-# A node can have generic attributes associated with it, which can later be 
used
-# for customized shard allocation filtering, or allocation awareness. An 
attribute
-# is a simple key value pair, similar to node.key: value, here is an example:
+# path.data: /path/to/data
 #
-# node.rack: rack314
-
-# By default, multiple nodes are allowed to start from the same installation 
location
-# to disable it, set the following:
-# node.max_local_storage_nodes: 1
-
-
-#################################### Index ####################################
-
-# You can set a number of options (such as shard/replica options, mapping
-# or analyzer definitions, translog settings, ...) for indices globally,
-# in this file.
+# Path to log files:
 #
-# Note, that it makes more sense to configure index settings specifically for
-# a certain index, either when creating it or by using the index templates API.
+# path.logs: /path/to/logs
 #
-# See 
<http://elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html>
 and
-# 
<http://elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html>
-# for more information.
-
-# Set the number of shards (splits) of an index (5 by default):
+# ----------------------------------- Memory 
-----------------------------------
 #
-# index.number_of_shards: 2
-
-# Set the number of replicas (additional copies) of an index (1 by default):
+# Lock the memory on startup:
 #
-# index.number_of_replicas: 1
-
-# Note, that for development on a local machine, with small indices, it usually
-# makes sense to "disable" the distributed features:
+# bootstrap.mlockall: true
 #
-# index.number_of_shards: 1
-# index.number_of_replicas: 0
-
-# These settings directly affect the performance of index and search operations
-# in your cluster. Assuming you have enough machines to hold shards and
-# replicas, the rule of thumb is:
+# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half 
the memory
+# available on the system and that the owner of the process is allowed to use 
this limit.
 #
-# 1. Having more *shards* enhances the _indexing_ performance and allows to
-#    _distribute_ a big index across machines.
-# 2. Having more *replicas* enhances the _search_ performance and improves the
-#    cluster _availability_.
+# Elasticsearch performs poorly when the system is swapping the memory.
 #
-# The "number_of_shards" is a one-time setting for an index.
+# ---------------------------------- Network 
-----------------------------------
 #
-# The "number_of_replicas" can be increased or decreased anytime,
-# by using the Index Update Settings API.
+# Set the bind address to a specific IP (IPv4 or IPv6):
 #
-# ElasticSearch takes care about load balancing, relocating, gathering the
-# results from nodes, etc. Experiment with different settings to fine-tune
-# your setup.
-
-# Use the Index Status API (<http://localhost:9200/A/_status>) to inspect
-# the index status.
-
-http.cors.enabled: true
-index.percolator.allow_unmapped_fields: true
-
-#################################### Paths ####################################
-
-# Path to directory containing configuration (this file and logging.yml):
+# network.host: 192.168.0.1
 #
-# path.conf: /path/to/conf
-
-# Path to directory where to store index data allocated for this node.
+# Set a custom port for HTTP:
 #
-# path.data: /path/to/data
+# http.port: 9200
 #
-# Can optionally include more than one location, causing data to be striped 
across
-# the locations (a la RAID 0) on a file level, favouring locations with most 
free
-# space on creation. For example:
+# For more information, see the documentation at:
+# 
<http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
 #
-# path.data: /path/to/data1,/path/to/data2
-
-# Path to temporary files:
+# --------------------------------- Discovery 
----------------------------------
 #
-# path.work: /path/to/work
-
-# Path to log files:
+# Pass an initial list of hosts to perform discovery when new node is started:
+# The default list of hosts is ["127.0.0.1", "[::1]"]
 #
-# path.logs: /path/to/logs
-
-# Path to where plugins are installed:
+# discovery.zen.ping.unicast.hosts: ["host1", "host2"]
 #
-# path.plugins: /path/to/plugins
-
-
-#################################### Plugin ###################################
-
-# If a plugin listed here is not installed for current node, the node will not 
start.
+# Prevent the "split brain" by configuring the majority of nodes (total number 
of nodes / 2 + 1):
 #
-# plugin.mandatory: mapper-attachments,lang-groovy
-
-
-################################### Memory ####################################
-
-# ElasticSearch performs poorly when JVM starts swapping: you should ensure 
that
-# it _never_ swaps.
+# discovery.zen.minimum_master_nodes: 3
 #
-# Set this property to true to lock the memory:
+# For more information, see the documentation at:
+# 
<http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
 #
-# bootstrap.mlockall: true
-
-# Make sure that the ES_MIN_MEM and ES_MAX_MEM environment variables are set
-# to the same value, and that the machine has enough memory to allocate
-# for ElasticSearch, leaving enough memory for the operating system itself.
+# ---------------------------------- Gateway 
-----------------------------------
 #
-# You should also make sure that the ElasticSearch process is allowed to lock
-# the memory, eg. by using `ulimit -l unlimited`.
-
-
-############################## Network And HTTP ###############################
-
-# ElasticSearch, by default, binds itself to the 0.0.0.0 address, and listens
-# on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node
-# communication. (the range means that if the port is busy, it will 
automatically
-# try the next port).
-
-# Set the bind address specifically (IPv4 or IPv6):
+# Block initial recovery after a full cluster restart until N nodes are 
started:
 #
-# network.bind_host: 192.168.0.1
-
-# Set the address other nodes will use to communicate with this node. If not
-# set, it is automatically derived. It must point to an actual IP address.
+# gateway.recover_after_nodes: 3
 #
-# network.publish_host: 192.168.0.1
-
-# Set both 'bind_host' and 'publish_host':
+# For more information, see the documentation at:
+# 
<http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
 #
-# network.host: 192.168.0.1
-
-# Set a custom port for the node to node communication (9300 by default):
+# ---------------------------------- Various 
-----------------------------------
 #
-# transport.tcp.port: 9300
-
-# Enable compression for all communication between nodes (disabled by default):
+# Disable starting multiple nodes on a single system:
 #
-# transport.tcp.compress: true
-
-# Set a custom port to listen for HTTP traffic:
-#
-# http.port: 9200
-
-# Set a custom allowed content length:
-#
-# http.max_content_length: 100mb
-
-# Disable HTTP completely:
-#
-# http.enabled: false
-
-
-################################### Gateway ###################################
-
-# The gateway allows for persisting the cluster state between full cluster
-# restarts. Every change to the state (such as adding an index) will be stored
-# in the gateway, and when the cluster starts up for the first time,
-# it will read its state from the gateway.
-
-# There are several types of gateway implementations. For more information, see
-# 
<http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-gateway.html>.
-
-# The default gateway type is the "local" gateway (recommended):
+# node.max_local_storage_nodes: 1
 #
-# gateway.type: local
-
-# Settings below control how and when to start the initial recovery process on
-# a full cluster restart (to reuse as much local data as possible when using 
shared
-# gateway).
-
-# Allow recovery process after N nodes in a cluster are up:
+# Require explicit names when deleting indices:
 #
-# gateway.recover_after_nodes: 1
-
-# Set the timeout to initiate the recovery process, once the N nodes
-# from previous setting are up (accepts time value):
+# action.destructive_requires_name: true
 #
-# gateway.recover_after_time: 10m
-
-# Set how many nodes are expected in this cluster. Once these N nodes
-# are up (and recover_after_nodes is met), begin recovery process immediately
-# (without waiting for recover_after_time to expire):
+# --------------------------- Apache Unomi specific ---------------------------
 #
-# gateway.expected_nodes: 2
+threadpool.index.queue_size: 1000
+script.engine.groovy.inline.update: on
+index.percolator.allow_unmapped_fields: true
 
 # Require explicit index creation
 action.auto_create_index: false
@@ -274,106 +108,3 @@ action.auto_create_index: false
 #action.disable_close_all_indices: true
 #action.disable_delete_all_indices: true
 #action.disable_shutdown: true
-
-############################# Recovery Throttling #############################
-
-# These settings allow to control the process of shards allocation between
-# nodes during initial recovery, replica allocation, rebalancing,
-# or when adding and removing nodes.
-
-# Set the number of concurrent recoveries happening on a node:
-#
-# 1. During the initial recovery
-#
-# cluster.routing.allocation.node_initial_primaries_recoveries: 4
-#
-# 2. During adding/removing nodes, rebalancing, etc
-#
-# cluster.routing.allocation.node_concurrent_recoveries: 2
-
-# Set to throttle throughput when recovering (eg. 100mb, by default 20mb):
-#
-#indices.recovery.max_bytes_per_sec: 100mb
-
-# Set to limit the number of open concurrent streams when
-# recovering a shard from a peer:
-#
-# indices.recovery.concurrent_streams: 5
-
-
-################################## Discovery ##################################
-
-# Discovery infrastructure ensures nodes can be found within a cluster
-# and master node is elected. Multicast discovery is the default.
-
-# Set to ensure a node sees N other master eligible nodes to be considered
-# operational within the cluster. Its recommended to set it to a higher value
-# than 1 when running more than 2 nodes in the cluster.
-#
-# discovery.zen.minimum_master_nodes: 1
-
-# Set the time to wait for ping responses from other nodes when discovering.
-# Set this option to a higher value on a slow or congested network
-# to minimize discovery failures:
-#
-# discovery.zen.ping.timeout: 3s
-
-# For more information, see
-# 
<http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html>
-
-# Unicast discovery allows to explicitly control which nodes will be used
-# to discover the cluster. It can be used when multicast is not present,
-# or to restrict the cluster communication-wise.
-#
-# 1. Disable multicast discovery (enabled by default):
-#
-# discovery.zen.ping.multicast.enabled: false
-#
-# 2. Configure an initial list of master nodes in the cluster
-#    to perform discovery when new nodes (master or data) are started:
-#
-# discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
-
-# EC2 discovery allows to use AWS EC2 API in order to perform discovery.
-#
-# You have to install the cloud-aws plugin for enabling the EC2 discovery.
-#
-# For more information, see
-# 
<http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-ec2.html>
-#
-# See <http://elasticsearch.org/tutorials/elasticsearch-on-ec2/>
-# for a step-by-step tutorial.
-
-
-################################## Slow Log ##################################
-
-# Shard level query and fetch threshold logging.
-
-#index.search.slowlog.threshold.query.warn: 10s
-#index.search.slowlog.threshold.query.info: 5s
-#index.search.slowlog.threshold.query.debug: 2s
-#index.search.slowlog.threshold.query.trace: 500ms
-
-#index.search.slowlog.threshold.fetch.warn: 1s
-#index.search.slowlog.threshold.fetch.info: 800ms
-#index.search.slowlog.threshold.fetch.debug: 500ms
-#index.search.slowlog.threshold.fetch.trace: 200ms
-
-#index.indexing.slowlog.threshold.index.warn: 10s
-#index.indexing.slowlog.threshold.index.info: 5s
-#index.indexing.slowlog.threshold.index.debug: 2s
-#index.indexing.slowlog.threshold.index.trace: 500ms
-
-################################## GC Logging ################################
-
-#monitor.jvm.gc.ParNew.warn: 1000ms
-#monitor.jvm.gc.ParNew.info: 700ms
-#monitor.jvm.gc.ParNew.debug: 400ms
-
-#monitor.jvm.gc.ConcurrentMarkSweep.warn: 10s
-#monitor.jvm.gc.ConcurrentMarkSweep.info: 5s
-#monitor.jvm.gc.ConcurrentMarkSweep.debug: 2s
-
-################################## Thread Pool ###############################
-threadpool.index.queue_size: 1000
-script.engine.groovy.inline.update: on

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/persistence-elasticsearch/core/src/test/java/org/apache/unomi/persistence/elasticsearch/FieldDotEscapeTest.java
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/core/src/test/java/org/apache/unomi/persistence/elasticsearch/FieldDotEscapeTest.java
 
b/persistence-elasticsearch/core/src/test/java/org/apache/unomi/persistence/elasticsearch/FieldDotEscapeTest.java
new file mode 100644
index 0000000..c4322dc
--- /dev/null
+++ 
b/persistence-elasticsearch/core/src/test/java/org/apache/unomi/persistence/elasticsearch/FieldDotEscapeTest.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.unomi.persistence.elasticsearch;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+
+/**
+ * A unit test class for the FieldDotEscaper utility methods
+ */
+public class FieldDotEscapeTest {
+
+    @Test
+    public void testTrickyJson() {
+        String result = FieldDotEscaper.escapeJson("{\"tricking_the_parser\" : 
\"this.should.not\\\": match.either\"}");
+        Assert.assertTrue("Found escaped pattern instead of untouched one", 
result.contains("this.should.not\\\": match.either"));
+    }
+
+    @Test
+    public void testJustDot() {
+        String result = FieldDotEscaper.escapeJson("{\".\" : 
\"this.should.not\\\": match.either\"}");
+        Assert.assertTrue("Didn't find expected escaped pattern", 
result.contains("\"__DOT__\""));
+        Assert.assertTrue("Found escaped pattern instead of untouched one", 
result.contains("this.should.not\\\": match.either"));
+    }
+
+    @Test
+    public void testComplexJson() throws IOException {
+        InputStream complexJsonInputStream = 
this.getClass().getClassLoader().getResourceAsStream("complex.json");
+        String input = IOUtils.toString(complexJsonInputStream);
+        System.out.println("Original JSON:");
+        System.out.println("=================");
+        System.out.println(input);
+        Set<String> modifiedNames = new LinkedHashSet<>();
+        String result = FieldDotEscaper.escapeJson(input, modifiedNames);
+        System.out.println("Modified names:");
+        System.out.println("=================");
+        for (String modifiedName : modifiedNames) {
+            System.out.println(modifiedName);
+        }
+        System.out.println("Transformed JSON:");
+        System.out.println("=================");
+        System.out.println(result);
+        Assert.assertTrue("Didn't find expected escaped pattern", 
result.contains("src_terms[0]__DOT__fields__DOT__siteContent"));
+        Assert.assertTrue("Didn't find expected escaped pattern", 
result.contains("newline__DOT__test"));
+        Assert.assertTrue("Found escaped pattern instead of untouched one", 
result.contains("this.should.never:match"));
+        Assert.assertTrue("Found escaped pattern instead of untouched one", 
result.contains("this.should.not\\\": match.either"));
+        result = FieldDotEscaper.unescapeJson(result);
+        Assert.assertEquals("Round trip of escaping then unescaping should be 
identical", input, result);
+    }
+
+    @Test
+    public void testString() {
+        String input = "this.is.a..test";
+        String result = 
FieldDotEscaper.unescapeString(FieldDotEscaper.escapeString(input));
+        Assert.assertEquals("Strings should be exactly the same", input, 
result);
+    }
+
+    @Test
+    public void testMap() {
+        Map<String,Object> input = new HashMap<>();
+        input.put("this.is.a..test", "1");
+        input.put("another.test", "2");
+        Map<? extends String,?> result = 
FieldDotEscaper.unescapeMap(FieldDotEscaper.escapeMap(input));
+        Assert.assertEquals("Maps should be identical", input, result);
+    }
+
+    @Test
+    public void testProperties() {
+        Properties input = new Properties();
+        input.put("this.is.a..test", "1");
+        input.put("another.test", "2");
+        Properties result = 
FieldDotEscaper.unescapeProperties(FieldDotEscaper.escapeProperties(input));
+        Assert.assertEquals("Properties should be identical", input, result);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/persistence-elasticsearch/core/src/test/java/org/apache/unomi/persistence/elasticsearch/FieldDotJsonTransformerTest.java
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/core/src/test/java/org/apache/unomi/persistence/elasticsearch/FieldDotJsonTransformerTest.java
 
b/persistence-elasticsearch/core/src/test/java/org/apache/unomi/persistence/elasticsearch/FieldDotJsonTransformerTest.java
new file mode 100644
index 0000000..284ac84
--- /dev/null
+++ 
b/persistence-elasticsearch/core/src/test/java/org/apache/unomi/persistence/elasticsearch/FieldDotJsonTransformerTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.unomi.persistence.elasticsearch;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.io.IOUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+/**
+ * A unit test class for our custom JSON parser.
+ */
+public class FieldDotJsonTransformerTest {
+
+    @Test
+    public void testNoReplacement() throws IOException {
+        InputStream complexJsonInputStream = 
this.getClass().getClassLoader().getResourceAsStream("complex.json");
+        String input = IOUtils.toString(complexJsonInputStream);
+        StringBuffer output = new StringBuffer();
+        FieldDotJsonTransformer fieldDotJsonTransformer = new 
FieldDotJsonTransformer(input, output, null);
+        fieldDotJsonTransformer.transform();
+        Assert.assertEquals("Parsed JSON and original should be identical", 
input, output.toString());
+        InputStream profileJsonInputStream = 
this.getClass().getClassLoader().getResourceAsStream("profile.json");
+        input = IOUtils.toString(profileJsonInputStream);
+        output = new StringBuffer();
+        fieldDotJsonTransformer = new FieldDotJsonTransformer(input, output, 
null);
+        fieldDotJsonTransformer.transform();
+        Assert.assertEquals("Parsed JSON and original should be identical", 
input, output.toString());
+    }
+
+    @Test
+    public void testWithJackson() throws IOException {
+        InputStream complexJsonInputStream = 
this.getClass().getClassLoader().getResourceAsStream("complex.json");
+        String input = IOUtils.toString(complexJsonInputStream);
+        StringBuffer output = new StringBuffer();
+        FieldDotJsonTransformer fieldDotJsonTransformer = new 
FieldDotJsonTransformer(input, output, FieldDotEscaper.DOT_ESCAPE_MARKER);
+        fieldDotJsonTransformer.transform();
+        ObjectMapper objectMapper = new ObjectMapper();
+        Map<String,Object> object = objectMapper.readValue(output.toString(), 
Map.class);
+        Assert.assertNotNull("Object parsed with Jackson should not be null", 
object);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/persistence-elasticsearch/core/src/test/resources/complex.json
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/test/resources/complex.json 
b/persistence-elasticsearch/core/src/test/resources/complex.json
new file mode 100644
index 0000000..c6ff41c
--- /dev/null
+++ b/persistence-elasticsearch/core/src/test/resources/complex.json
@@ -0,0 +1,50 @@
+{
+  "events": [
+    {
+      "scope": "ACMESPACE",
+      "eventType": "form",
+      "source": {
+        "itemType": "page",
+        "scope": "ACMESPACE",
+        "itemId": "${pageId}",
+        "properties": {
+          "pageInfo": {
+            "pageID": "${pageId}",
+            "pageName": "${pageName}",
+            "pagePath": "${pagePath}",
+            "destinationURL": "${destinationURL}",
+            "referringURL": "${previousURL}",
+            "language": "${language}"
+          },
+          "category": {},
+          "attributes": {
+            "colon_in_value" : "this.should.never:match",
+            "newline.test"
+                    : "more.dots",
+            "tricking_the_parser" : "this.should.not\": match.either",
+            "unicode black star": "before\u2605after",
+            "escaping test" : "\"\n\r\t\\"
+          }
+        }
+      },
+      "target": {
+        "itemType": "form",
+        "scope": "ACMESPACE",
+        "itemId": "searchForm"
+      },
+      "properties": {
+        "jcrMethodToCall": "get",
+        "src_originSiteKey": "ACMESPACE",
+        "src_terms[0].term": "${word}",
+        "src_terms[0].applyFilter": "true",
+        "src_terms[0].match": "all_words",
+        "src_terms[0].fields.siteContent": "true",
+        "src_terms[0].fields.tags": "true",
+        "src_terms[0].fields.files": "true",
+        "src_sites.values": "ACMESPACE",
+        "src_sitesForReferences.values": "systemsite",
+        "src_languages.values": "en"
+      }
+    }
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/persistence-elasticsearch/core/src/test/resources/profile.json
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/test/resources/profile.json 
b/persistence-elasticsearch/core/src/test/resources/profile.json
new file mode 100644
index 0000000..8fc9d2c
--- /dev/null
+++ b/persistence-elasticsearch/core/src/test/resources/profile.json
@@ -0,0 +1 @@
+{"itemId":"6bb362d8-d094-44b4-ba2e-012163286825","itemType":"personaSession","scope":null,"profileId":"googleBot","profile":{"itemId":"googleBot","itemType":"persona","properties":{"description":"Represents
 a Google 
bot","firstName":"Google","lastName":"Bot"},"systemProperties":{},"segments":[],"scores":null,"mergedWith":null},"properties":{"operatingSystemName":"unknown","sessionCountryName":"United
 
States","location":{"lon":-122.084058,"lat":37.422},"userAgentVersion":"2.1","sessionCountryCode":"US","deviceCategory":"Other","operatingSystemFamily":"unknown","userAgentName":"Googlebot/2.1","sessionCity":"Mountain
 
View","remoteHost":"www.google.com","remoteAddr":"66.249.66.1"},"systemProperties":{},"timeStamp":"2014-09-18T09:18:52Z","lastEventDate":"2014-09-18T11:23:59Z","size":0,"duration":7507068}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPlugin.java
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPlugin.java
 
b/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPlugin.java
index 61814a1..79fc7d3 100644
--- 
a/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPlugin.java
+++ 
b/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPlugin.java
@@ -20,13 +20,13 @@ package org.apache.unomi.elasticsearch.plugin.security;
 import org.elasticsearch.common.component.LifecycleComponent;
 import org.elasticsearch.common.inject.Module;
 import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.plugins.AbstractPlugin;
+import org.elasticsearch.plugins.Plugin;
 
 import java.util.Collection;
 
-import static org.elasticsearch.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Lists.newArrayList;
 
-public class SecurityPlugin extends AbstractPlugin {
+public class SecurityPlugin extends Plugin {
 
     public SecurityPlugin(Settings settings) {
         super();
@@ -41,17 +41,17 @@ public class SecurityPlugin extends AbstractPlugin {
     }
 
     @Override
-    public Collection<Class<? extends Module>> modules() {
-        Collection<Class<? extends Module>> modules = newArrayList();
+    public Collection<Module> nodeModules() {
+        Collection<Module> modules = newArrayList();
         // if (settings.getAsBoolean("security.enabled", true)) {
-        modules.add(SecurityPluginModule.class);
+        modules.add(new SecurityPluginModule());
         // }
         return modules;
     }
 
     @SuppressWarnings("rawtypes")
     @Override
-    public Collection<Class<? extends LifecycleComponent>> services() {
+    public Collection<Class<? extends LifecycleComponent>> nodeServices() {
         Collection<Class<? extends LifecycleComponent>> services = 
newArrayList();
         // if (settings.getAsBoolean("security.enabled", true)) {
         services.add(SecurityPluginService.class);

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginModule.java
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginModule.java
 
b/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginModule.java
index 67e1770..353c05f 100644
--- 
a/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginModule.java
+++ 
b/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginModule.java
@@ -18,11 +18,10 @@
 package org.apache.unomi.elasticsearch.plugin.security;
 
 import org.elasticsearch.common.inject.AbstractModule;
-import org.elasticsearch.common.settings.Settings;
 
 public class SecurityPluginModule extends AbstractModule {
 
-    public SecurityPluginModule(Settings settings) {
+    public SecurityPluginModule() {
         super();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginService.java
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginService.java
 
b/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginService.java
index f3941ea..6bd73eb 100644
--- 
a/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginService.java
+++ 
b/persistence-elasticsearch/plugins/security/src/main/java/org/apache/unomi/elasticsearch/plugin/security/SecurityPluginService.java
@@ -56,10 +56,10 @@ public class SecurityPluginService extends 
AbstractLifecycleComponent<SecurityPl
         super(settings);
         this.restController = restController;
         this.transportService = transportService;
-        this.publishHost = componentSettings.get("publish_host", 
settings.get("transport.publish_host", settings.get("transport.host")));
+        this.publishHost = settings.get("publish_host", 
settings.get("transport.publish_host", settings.get("transport.host")));
         InetAddress publishHostAddress = null;
         try {
-            publishHostAddress = 
networkService.resolvePublishHostAddress(publishHost);
+            publishHostAddress = 
networkService.resolvePublishHostAddresses(new String[] { publishHost });
         } catch (IOException e) {
             logger.error("Error trying to resolve publish host address " + 
publishHost);
         }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java
index c41309b..f5330ed 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java
@@ -20,10 +20,10 @@ package org.apache.unomi.plugins.baseplugin.conditions;
 import org.apache.unomi.api.conditions.Condition;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher;
-import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -33,8 +33,8 @@ import java.util.Map;
 public class BooleanConditionESQueryBuilder implements ConditionESQueryBuilder 
{
 
     @Override
-    public FilterBuilder buildFilter(Condition condition, Map<String, Object> 
context,
-            ConditionESQueryBuilderDispatcher dispatcher) {
+    public QueryBuilder buildQuery(Condition condition, Map<String, Object> 
context,
+                                   ConditionESQueryBuilderDispatcher 
dispatcher) {
         boolean isAndOperator = "and".equalsIgnoreCase((String) 
condition.getParameter("operator"));
         @SuppressWarnings("unchecked")
         List<Condition> conditions = (List<Condition>) 
condition.getParameter("subConditions");
@@ -45,11 +45,15 @@ public class BooleanConditionESQueryBuilder implements 
ConditionESQueryBuilder {
             return dispatcher.buildFilter(conditions.get(0), context);
         }
 
-        FilterBuilder[] l = new FilterBuilder[conditionCount];
+        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
         for (int i = 0; i < conditionCount; i++) {
-            l[i] = dispatcher.buildFilter(conditions.get(i));
+            if (isAndOperator) {
+                
boolQueryBuilder.must(dispatcher.buildFilter(conditions.get(i)));
+            } else {
+                
boolQueryBuilder.should(dispatcher.buildFilter(conditions.get(i)));
+            }
         }
 
-        return isAndOperator ? FilterBuilders.andFilter(l) : 
FilterBuilders.orFilter(l);
+        return boolQueryBuilder;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/GeoLocationByPointSessionConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/GeoLocationByPointSessionConditionESQueryBuilder.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/GeoLocationByPointSessionConditionESQueryBuilder.java
index 804f4f4..083cfe4 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/GeoLocationByPointSessionConditionESQueryBuilder.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/GeoLocationByPointSessionConditionESQueryBuilder.java
@@ -20,14 +20,14 @@ package org.apache.unomi.plugins.baseplugin.conditions;
 import org.apache.unomi.api.conditions.Condition;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher;
-import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
 
 import java.util.Map;
 
 public class GeoLocationByPointSessionConditionESQueryBuilder implements 
ConditionESQueryBuilder {
     @Override
-    public FilterBuilder buildFilter(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
+    public QueryBuilder buildQuery(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
         String type = (String) condition.getParameter("type");
 
         if("circle".equals(type)) {
@@ -36,7 +36,7 @@ public class GeoLocationByPointSessionConditionESQueryBuilder 
implements Conditi
             String distance = condition.getParameter("distance").toString();
 
             if(circleLatitude != null && circleLongitude != null && distance 
!= null) {
-                return FilterBuilders.geoDistanceFilter("location")
+                return QueryBuilders.geoDistanceQuery("location")
                         .lat(circleLatitude)
                         .lon(circleLongitude)
                         .distance(distance);
@@ -48,7 +48,7 @@ public class GeoLocationByPointSessionConditionESQueryBuilder 
implements Conditi
             Double rectLongitudeSW = (Double) 
condition.getParameter("rectLongitudeSW");
 
             if(rectLatitudeNE != null && rectLongitudeNE != null && 
rectLatitudeSW != null && rectLongitudeSW != null) {
-                return FilterBuilders.geoBoundingBoxFilter("location")
+                return QueryBuilders.geoBoundingBoxQuery("location")
                         .topLeft(rectLatitudeNE, rectLongitudeNE)
                         .bottomRight(rectLatitudeSW, rectLongitudeSW);
             }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/MatchAllConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/MatchAllConditionESQueryBuilder.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/MatchAllConditionESQueryBuilder.java
index 9efd2c1..700286a 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/MatchAllConditionESQueryBuilder.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/MatchAllConditionESQueryBuilder.java
@@ -20,15 +20,15 @@ package org.apache.unomi.plugins.baseplugin.conditions;
 import org.apache.unomi.api.conditions.Condition;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher;
-import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
 
 import java.util.Map;
 
 public class MatchAllConditionESQueryBuilder implements 
ConditionESQueryBuilder {
 
     @Override
-    public FilterBuilder buildFilter(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
-        return FilterBuilders.matchAllFilter();
+    public QueryBuilder buildQuery(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
+        return QueryBuilders.matchAllQuery();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/NotConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/NotConditionESQueryBuilder.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/NotConditionESQueryBuilder.java
index 7793aa0..9574fe8 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/NotConditionESQueryBuilder.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/NotConditionESQueryBuilder.java
@@ -20,8 +20,8 @@ package org.apache.unomi.plugins.baseplugin.conditions;
 import org.apache.unomi.api.conditions.Condition;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher;
-import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
 
 import java.util.Map;
 
@@ -30,8 +30,8 @@ import java.util.Map;
  */
 public class NotConditionESQueryBuilder implements ConditionESQueryBuilder {
 
-    public FilterBuilder buildFilter(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
+    public QueryBuilder buildQuery(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
         Condition subCondition = (Condition) 
condition.getParameter("subCondition");
-        return FilterBuilders.notFilter(dispatcher.buildFilter(subCondition, 
context));
+        return 
QueryBuilders.boolQuery().mustNot(dispatcher.buildFilter(subCondition, 
context));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/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 1472cf9..84d964f 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
@@ -26,8 +26,8 @@ import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBui
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher;
 import org.apache.unomi.persistence.spi.PersistenceService;
 import org.apache.unomi.persistence.spi.aggregate.TermsAggregate;
-import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
 
 import java.util.*;
 
@@ -43,7 +43,7 @@ public class PastEventConditionESQueryBuilder implements 
ConditionESQueryBuilder
         this.persistenceService = persistenceService;
     }
 
-    public FilterBuilder buildFilter(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
+    public QueryBuilder buildQuery(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
         Condition eventCondition;
         try {
             eventCondition = (Condition) 
condition.getParameter("eventCondition");
@@ -84,6 +84,6 @@ public class PastEventConditionESQueryBuilder implements 
ConditionESQueryBuilder
             }
         }
 
-        return 
FilterBuilders.idsFilter(Profile.ITEM_TYPE).addIds(ids.toArray(new 
String[ids.size()]));
+        return 
QueryBuilders.idsQuery(Profile.ITEM_TYPE).addIds(ids.toArray(new 
String[ids.size()]));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/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 d063ff3..23f1df8 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
@@ -22,9 +22,10 @@ import org.apache.unomi.api.conditions.Condition;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher;
-import org.elasticsearch.common.joda.time.DateTime;
-import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.joda.time.DateTime;
 
 import java.util.List;
 import java.util.Map;
@@ -35,7 +36,7 @@ public class PropertyConditionESQueryBuilder implements 
ConditionESQueryBuilder
     }
 
     @Override
-    public FilterBuilder buildFilter(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
+    public QueryBuilder buildQuery(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
         String op = (String) condition.getParameter("comparisonOperator");
         String name = (String) condition.getParameter("propertyName");
 
@@ -60,56 +61,60 @@ public class PropertyConditionESQueryBuilder implements 
ConditionESQueryBuilder
         switch (op) {
             case "equals":
                 checkRequiredValue(value, name, op, false);
-                return FilterBuilders.termFilter(name, value);
+                return QueryBuilders.termQuery(name, value);
             case "notEquals":
                 checkRequiredValue(value, name, op, false);
-                return 
FilterBuilders.notFilter(FilterBuilders.termFilter(name, value));
+                return 
QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery(name, value));
             case "greaterThan":
                 checkRequiredValue(value, name, op, false);
-                return FilterBuilders.rangeFilter(name).gt(value);
+                return QueryBuilders.rangeQuery(name).gt(value);
             case "greaterThanOrEqualTo":
                 checkRequiredValue(value, name, op, false);
-                return FilterBuilders.rangeFilter(name).gte(value);
+                return QueryBuilders.rangeQuery(name).gte(value);
             case "lessThan":
                 checkRequiredValue(value, name, op, false);
-                return FilterBuilders.rangeFilter(name).lt(value);
+                return QueryBuilders.rangeQuery(name).lt(value);
             case "lessThanOrEqualTo":
                 checkRequiredValue(value, name, op, false);
-                return FilterBuilders.rangeFilter(name).lte(value);
+                return QueryBuilders.rangeQuery(name).lte(value);
             case "between":
                 checkRequiredValuesSize(values, name, op, 2);
-                return 
FilterBuilders.rangeFilter(name).gte(values.get(0)).lte(values.get(1));
+                return 
QueryBuilders.rangeQuery(name).gte(values.get(0)).lte(values.get(1));
             case "exists":
-                return FilterBuilders.existsFilter(name);
+                return QueryBuilders.existsQuery(name);
             case "missing":
-                return FilterBuilders.missingFilter(name);
+                return 
QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery((name)));
             case "contains":
                 checkRequiredValue(expectedValue, name, op, false);
-                return FilterBuilders.regexpFilter(name, ".*" + expectedValue 
+ ".*");
+                return QueryBuilders.regexpQuery(name, ".*" + expectedValue + 
".*");
             case "startsWith":
                 checkRequiredValue(expectedValue, name, op, false);
-                return FilterBuilders.prefixFilter(name, expectedValue);
+                return QueryBuilders.prefixQuery(name, expectedValue);
             case "endsWith":
                 checkRequiredValue(expectedValue, name, op, false);
-                return FilterBuilders.regexpFilter(name, ".*" + expectedValue);
+                return QueryBuilders.regexpQuery(name, ".*" + expectedValue);
             case "matchesRegex":
                 checkRequiredValue(expectedValue, name, op, false);
-                return FilterBuilders.regexpFilter(name, expectedValue);
+                return QueryBuilders.regexpQuery(name, expectedValue);
             case "in":
                 checkRequiredValue(values, name, op, true);
-                return FilterBuilders.inFilter(name, values.toArray());
+                return QueryBuilders.termsQuery(name, values.toArray());
             case "notIn":
                 checkRequiredValue(values, name, op, true);
-                return FilterBuilders.notFilter(FilterBuilders.inFilter(name, 
values.toArray()));
+                return 
QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(name, 
values.toArray()));
             case "all":
                 checkRequiredValue(values, name, op, true);
-                return FilterBuilders.termsFilter(name, 
values.toArray()).execution("and");
+                BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+                for (Object curValue : values) {
+                    boolQueryBuilder.must(QueryBuilders.termQuery(name, 
curValue));
+                }
+                return boolQueryBuilder;
             case "isDay":
                 checkRequiredValue(value, name, op, false);
                 return getIsSameDayRange(value, name);
             case "isNotDay":
                 checkRequiredValue(value, name, op, false);
-                return FilterBuilders.notFilter(getIsSameDayRange(value, 
name));
+                return 
QueryBuilders.boolQuery().mustNot(getIsSameDayRange(value, name));
         }
         return null;
     }
@@ -126,10 +131,10 @@ public class PropertyConditionESQueryBuilder implements 
ConditionESQueryBuilder
         }
     }
 
-    private FilterBuilder getIsSameDayRange (Object value, String name) {
+    private QueryBuilder getIsSameDayRange (Object value, String name) {
         DateTime date = new DateTime(value);
         DateTime dayStart = date.withTimeAtStartOfDay();
         DateTime dayAfterStart = date.plusDays(1).withTimeAtStartOfDay();
-        return 
FilterBuilders.rangeFilter(name).gte(dayStart.toDate()).lte(dayAfterStart.toDate());
+        return 
QueryBuilders.rangeQuery(name).gte(dayStart.toDate()).lte(dayAfterStart.toDate());
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
----------------------------------------------------------------------
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
index ca3e512..e0c5e61 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
@@ -41,7 +41,6 @@ import org.slf4j.LoggerFactory;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
 import java.util.regex.Pattern;
 
 /**
@@ -271,7 +270,7 @@ public class PropertyConditionEvaluator implements 
ConditionEvaluator {
         if (value instanceof Date) {
             return ((Date) value);
         } else {
-            DateMathParser parser = new 
DateMathParser(DateFieldMapper.Defaults.DATE_TIME_FORMATTER, 
TimeUnit.MILLISECONDS);
+            DateMathParser parser = new 
DateMathParser(DateFieldMapper.Defaults.DATE_TIME_FORMATTER);
             try {
                 return new Date(parser.parse(value.toString(), new 
Callable<Long>() {
                     @Override

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionESQueryBuilder.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionESQueryBuilder.java
index 68e5944..7ba6c6f 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionESQueryBuilder.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionESQueryBuilder.java
@@ -20,8 +20,9 @@ package org.apache.unomi.plugins.baseplugin.conditions;
 import org.apache.unomi.api.conditions.Condition;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher;
-import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -32,21 +33,29 @@ public class SourceEventPropertyConditionESQueryBuilder 
implements ConditionESQu
     public SourceEventPropertyConditionESQueryBuilder() {
     }
 
-    private void appendFilderIfPropExist(List<FilterBuilder> filterBuilders, 
Condition condition, String prop){
+    private void appendFilderIfPropExist(List<QueryBuilder> queryBuilders, 
Condition condition, String prop){
         final Object parameter = condition.getParameter(prop);
         if (parameter != null && !"".equals(parameter)) {
-            filterBuilders.add(FilterBuilders.termFilter("source." + prop, 
(String) parameter));
+            queryBuilders.add(QueryBuilders.termQuery("source." + prop, 
(String) parameter));
         }
     }
 
-    public FilterBuilder buildFilter(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
-        List<FilterBuilder> l = new ArrayList<FilterBuilder>();
+    public QueryBuilder buildQuery(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
+        List<QueryBuilder> queryBuilders = new ArrayList<QueryBuilder>();
         for (String prop : new String[]{"id", "path", "scope", "type"}){
-            appendFilderIfPropExist(l, condition, prop);
+            appendFilderIfPropExist(queryBuilders, condition, prop);
         }
 
-        if (l.size() >= 1) {
-            return l.size() == 1 ? l.get(0) : 
FilterBuilders.andFilter(l.toArray(new FilterBuilder[l.size()]));
+        if (queryBuilders.size() >= 1) {
+            if (queryBuilders.size() == 1) {
+                return queryBuilders.get(0);
+            } else {
+                BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+                for (QueryBuilder queryBuilder : queryBuilders) {
+                    boolQueryBuilder.must(queryBuilder);
+                }
+                return boolQueryBuilder;
+            }
         } else {
             return null;
         }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/plugins/hover-event/src/main/java/org/apache/unomi/plugins/events/hover/querybuilders/HoverEventConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git 
a/plugins/hover-event/src/main/java/org/apache/unomi/plugins/events/hover/querybuilders/HoverEventConditionESQueryBuilder.java
 
b/plugins/hover-event/src/main/java/org/apache/unomi/plugins/events/hover/querybuilders/HoverEventConditionESQueryBuilder.java
index 201b834..978edef 100644
--- 
a/plugins/hover-event/src/main/java/org/apache/unomi/plugins/events/hover/querybuilders/HoverEventConditionESQueryBuilder.java
+++ 
b/plugins/hover-event/src/main/java/org/apache/unomi/plugins/events/hover/querybuilders/HoverEventConditionESQueryBuilder.java
@@ -20,8 +20,9 @@ package org.apache.unomi.plugins.events.hover.querybuilders;
 import org.apache.unomi.api.conditions.Condition;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder;
 import 
org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher;
-import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,19 +36,23 @@ public class HoverEventConditionESQueryBuilder implements 
ConditionESQueryBuilde
     public HoverEventConditionESQueryBuilder() {
     }
 
-    public FilterBuilder buildFilter(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
-        List<FilterBuilder> filters = new ArrayList<FilterBuilder>();
-        filters.add(FilterBuilders.termFilter("eventType", "hover"));
+    public QueryBuilder buildQuery(Condition condition, Map<String, Object> 
context, ConditionESQueryBuilderDispatcher dispatcher) {
+        List<QueryBuilder> queryBuilders = new ArrayList<QueryBuilder>();
+        queryBuilders.add(QueryBuilders.termQuery("eventType", "hover"));
         String targetId = (String) condition.getParameter("targetId");
         String targetPath = (String) condition.getParameter("targetPath");
 
         if (targetId != null && targetId.trim().length() > 0) {
-            filters.add(FilterBuilders.termFilter("target.itemId", targetId));
+            queryBuilders.add(QueryBuilders.termQuery("target.itemId", 
targetId));
         } else if (targetPath != null && targetPath.trim().length() > 0) {
-            
filters.add(FilterBuilders.termFilter("target.properties.pageInfo.pagePath", 
targetPath));
+            
queryBuilders.add(QueryBuilders.termQuery("target.properties.pageInfo.pagePath",
 targetPath));
         } else {
-            filters.add(FilterBuilders.termFilter("target.itemId", ""));
+            queryBuilders.add(QueryBuilders.termQuery("target.itemId", ""));
         }
-        return FilterBuilders.andFilter(filters.toArray(new 
FilterBuilder[filters.size()]));
+        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+        for (QueryBuilder queryBuilder : queryBuilders) {
+            boolQueryBuilder.must(queryBuilder);
+        }
+        return boolQueryBuilder;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/131a06aa/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index db4e1dd..a94c0a0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,11 +65,11 @@
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <cxf.version>2.7.11</cxf.version>
-        <version.jackson.core>2.4.0</version.jackson.core> <!-- version used 
by CXF -->
-        <version.jackson.jaxb>2.4.0</version.jackson.jaxb> <!-- version used 
by CXF -->
+        <version.jackson.core>2.6.6</version.jackson.core> <!-- version used 
by CXF -->
+        <version.jackson.jaxb>2.6.6</version.jackson.jaxb> <!-- version used 
by CXF -->
         <version.karaf>3.0.2</version.karaf>
-        <version.pax.exam>4.4.0</version.pax.exam>
-        <elasticsearch.version>1.6.2</elasticsearch.version>
+        <version.pax.exam>4.9.1</version.pax.exam>
+        <elasticsearch.version>2.3.4</elasticsearch.version>
 
         <maven.compiler.source>1.7</maven.compiler.source>
         <maven.compiler.target>1.7</maven.compiler.target>

Reply via email to