From c2a3bac147a786210b1ba4125a4be9edc66719c4 Mon Sep 17 00:00:00 2001 From: Anuj Kumar Date: Mon, 23 Apr 2018 10:42:13 +0200 Subject: [PATCH] JENA-1532 | fix for date based text query search --- .../main/java/examples/JenaESTextExample.java | 3 +- .../jena/query/text/es/TextIndexES.java | 13 ++++---- .../jena/query/text/es/it/TextIndexESIT.java | 30 +++++++++++++++++++ 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/jena-text-es/src/main/java/examples/JenaESTextExample.java b/jena-text-es/src/main/java/examples/JenaESTextExample.java index f48b291935a..1b40fe6e32a 100644 --- a/jena-text-es/src/main/java/examples/JenaESTextExample.java +++ b/jena-text-es/src/main/java/examples/JenaESTextExample.java @@ -73,7 +73,8 @@ public static void queryDataWithoutProperty(Dataset dataset) String qs = StrUtils.strjoinNL ( "SELECT * " // , " { ?s text:query (rdfs:comment 'this' 'lang:en') ;" - , " { ?s text:query ('this' 'lang:en*') ;" +// , " { ?s text:query ('this' 'lang:en*') ;" + ,"{ ?s text:query ('2016-12-01T15:31:10-05:00') ;" // , " { ?s text:query ('this' 'lang:en-GB') ;" // , " { ?s text:query (rdfs:comment 'this' 'lang:en-GB') ;" // , " { ?s text:query (rdfs:comment 'this' 'lang:*') ;" diff --git a/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java b/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java index fc2a8b561e3..6e5e91c2a1e 100644 --- a/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java +++ b/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java @@ -18,11 +18,6 @@ package org.apache.jena.query.text.es; -import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; - -import java.net.InetAddress; -import java.util.*; - import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.jena.graph.Node; import org.apache.jena.graph.NodeFactory; @@ -48,6 +43,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.net.InetAddress; +import java.util.*; + +import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; + /** * Elastic Search Implementation of {@link TextIndex} * @@ -422,6 +422,9 @@ public EntityDefinition getDocDef() { } private String parse(String fieldName, String qs, String lang) { + //Escape the ":" character if any in the query string + qs = qs.replaceAll("\\:", "\\\\:"); + if(fieldName != null && !fieldName.isEmpty()) { if(lang != null && !lang.equals("none")) { if (!ASTERISK.equals(lang)) { diff --git a/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java b/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java index 9d0e38d2853..0ccb2033dfc 100644 --- a/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java +++ b/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java @@ -45,6 +45,36 @@ public void testAddEntity() { Assert.assertEquals(labelValue, ((List)response.getSource().get(labelKey)).get(0)); } + @Test + public void testAddDateEntity() { + String dateKey = "label"; + String dateValue = "2016-12-01T15:31:10-05:00"; + Assert.assertNotNull(classToTest); + Entity entityToAdd = entity("http://example/x5", dateKey, dateValue); + GetResponse response = addEntity(entityToAdd); + Assert.assertTrue(response.getSource().containsKey(dateKey)); + Assert.assertEquals(dateValue, ((List)response.getSource().get(dateKey)).get(0)); + } + + @Test + public void dateQuery() { + testAddDateEntity(); + List result = classToTest.query(RDFS.label.asNode(), "2016-12-01T15:31:10-05:00", null, null, 10); + Assert.assertNotNull(result); + Assert.assertEquals(1, result.size()); + + //This will search for value "2016-12-01T15:31:10-05:00" across all the fields + result = classToTest.query(null, "2016-12-01T15:31:10-05:00", null, null, 10); + Assert.assertNotNull(result); + Assert.assertEquals(1, result.size()); + + //This will search for value "this" in the label_en field, if it exists. In this case it doesnt so we should get zero results + result = classToTest.query(RDFS.label.asNode(), "2016-12-01T15:31:10-05:00", null, "en", 10); + Assert.assertNotNull(result); + Assert.assertEquals(0, result.size()); + + } + @Test public void testDeleteEntity() { testAddEntity();