You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2018/05/04 08:40:43 UTC
[2/9] jena git commit: JENA-1532 | fix for date based text query
search
JENA-1532 | fix for date based text query search
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/7f4915ee
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/7f4915ee
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/7f4915ee
Branch: refs/heads/master
Commit: 7f4915ee6c94b1044155110fe4612147a9e8de91
Parents: c2a3bac
Author: Anuj Kumar <ak...@isightpartners.com>
Authored: Mon Apr 23 20:23:38 2018 +0200
Committer: Anuj Kumar <ak...@isightpartners.com>
Committed: Mon Apr 23 20:23:38 2018 +0200
----------------------------------------------------------------------
.../apache/jena/query/text/es/TextIndexES.java | 22 +-
.../jena/query/text/es/it/TextIndexESIT.java | 244 ++++++++++++++++---
2 files changed, 233 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/7f4915ee/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
----------------------------------------------------------------------
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 6e5e91c..6a8a649 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
@@ -422,8 +422,26 @@ public class TextIndexES implements TextIndex {
}
private String parse(String fieldName, String qs, String lang) {
- //Escape the ":" character if any in the query string
- qs = qs.replaceAll("\\:", "\\\\:");
+ //Escape special characters if any in the query string
+ qs = qs.replaceAll("\\:", "\\\\:")
+ .replaceAll("\\+", "\\\\+")
+ .replaceAll("\\-", "\\\\-")
+ .replaceAll("\\=", "\\\\=")
+ .replaceAll("\\&", "\\\\&")
+ .replaceAll("\\|", "\\\\|")
+ .replaceAll("\\>", "\\\\>")
+ .replaceAll("\\<", "\\\\<")
+ .replaceAll("\\!", "\\\\!")
+ .replaceAll("\\(", "\\\\(")
+ .replaceAll("\\)", "\\\\)")
+ .replaceAll("\\{", "\\\\{")
+ .replaceAll("\\}", "\\\\}")
+ .replaceAll("\\]", "\\\\]")
+ .replaceAll("\\[", "\\\\[")
+ .replaceAll("\\^", "\\\\^")
+ .replaceAll("\\~", "\\\\~")
+ .replaceAll("\\?", "\\\\?");
+
if(fieldName != null && !fieldName.isEmpty()) {
if(lang != null && !lang.equals("none")) {
http://git-wip-us.apache.org/repos/asf/jena/blob/7f4915ee/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
----------------------------------------------------------------------
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 0ccb203..1e03e39 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
@@ -36,59 +36,241 @@ public class TextIndexESIT extends BaseESTest {
@Test
public void testAddEntity() {
- String labelKey = "label";
- String labelValue = "this is a sample Label";
- Assert.assertNotNull(classToTest);
- Entity entityToAdd = entity("http://example/x3", labelKey, labelValue);
- GetResponse response = addEntity(entityToAdd);
- Assert.assertTrue(response.getSource().containsKey(labelKey));
- Assert.assertEquals(labelValue, ((List<?>)response.getSource().get(labelKey)).get(0));
+
+ addSpecialCharacterString("label", "this is a sample Label");
+
}
@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));
+
+ addSpecialCharacterString("label", "2016-12-01T15:31:10-05:00");
+
}
@Test
- public void dateQuery() {
- testAddDateEntity();
- List<TextHit> result = classToTest.query(RDFS.label.asNode(), "2016-12-01T15:31:10-05:00", null, null, 10);
- Assert.assertNotNull(result);
- Assert.assertEquals(1, result.size());
+ public void testPlusInSearchQuery() {
+ //Test + character string
+ addSpecialCharacterString("label", "We have +plus in the string");
+ String queryString = "+plus";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
- //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());
+ @Test
+ public void testMinusInSearchQuery() {
+ //Test - character string
+ addSpecialCharacterString("label", "We have -minus in the string");
+ String queryString = "-minus";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
- //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 testEqualInSearchQuery() {
+ //Test = character string
+ addSpecialCharacterString("label", "We have =equal in the string");
+ String queryString = "=equal";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+
+ @Test
+ public void testAmpersandInSearchQuery() {
+ //Test && character string
+ addSpecialCharacterString("label", "We have &&ersand in the string");
+ String queryString = "&&ersand";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+ @Test
+ public void testPipeInSearchQuery() {
+// Test || character string
+ addSpecialCharacterString("label", "We have ||pipe in the string");
+ String queryString = "||pipe";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
}
@Test
+ public void testGreaterInSearchQuery() {
+// //Test > character string
+ addSpecialCharacterString("label", "We have >greater in the string");
+ String queryString = ">greater";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testLessInSearchQuery() {
+ // Test < character string
+ addSpecialCharacterString("label", "We have <less in the string");
+ String queryString = "<less";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+
+ @Test
+ public void testExclamationInSearchQuery() {
+ //Test ! character string
+ addSpecialCharacterString("label", "We have !notequal in the string");
+ String queryString = "!notequal";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testOpenRoundInSearchQuery() {
+ //Test ( character string
+ addSpecialCharacterString("label", "We have (bracket in the string");
+ String queryString = "(bracket";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testClosedRoundInSearchQuery() {
+ //Test ) character string
+ addSpecialCharacterString("label", "We have )bracket in the string");
+ String queryString = ")bracket";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testOpenCurlyInSearchQuery() {
+ //Test {bracket character string
+ addSpecialCharacterString("label", "We have {bracket in the string");
+ String queryString = "{bracket";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testClosedCurlyInSearchQuery() {
+ //Test }bracket character string
+ addSpecialCharacterString("label", "We have }bracket in the string");
+ String queryString = "}bracket";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testOpenSquareInSearchQuery() {
+ //Test [bracket character string
+ addSpecialCharacterString("label", "We have [bracket in the string");
+ String queryString = "[bracket";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testClosedSquareInSearchQuery() {
+ //Test ]bracket character string
+ addSpecialCharacterString("label", "We have ]bracket in the string");
+ String queryString = "]bracket";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testCaretInSearchQuery() {
+ //Test ^bracket character string
+ addSpecialCharacterString("label", "We have ^bracket in the string");
+ String queryString = "^bracket";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testTildaInSearchQuery() {
+ //Test ~bracket character string
+ addSpecialCharacterString("label", "We have ~tilda in the string");
+ String queryString = "~tilda";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testQuestionInSearchQuery() {
+ //Test ?question character string
+ addSpecialCharacterString("label", "We have ?question in the string");
+ String queryString = "?question";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+ }
+
+ @Test
+ public void testDateQuery() {
+ addSpecialCharacterString("label", "2016-12-01T15:31:10-05:00");
+ String queryString = "2016-12-01T15:31:10-05:00";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+
+ }
+
+ @Test
+ public void testDoubleQouteQuery() {
+ addSpecialCharacterString("label", "This is a \"double\" quote");
+ String queryString = "\"double\"";
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+ querySpecialCharacterQuery(null, queryString, null, 10, 1);
+ querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+
+ }
+
+
+ private void addSpecialCharacterString(String key, String value) {
+
+ Assert.assertNotNull(classToTest);
+ Entity entityToAdd = entity("http://example/x5", key, value);
+ GetResponse response = addEntity(entityToAdd);
+ Assert.assertTrue(response.getSource().containsKey(key));
+ Assert.assertEquals(value, ((List<?>)response.getSource().get(key)).get(0));
+
+ }
+ private void querySpecialCharacterQuery(Node label, String queryString, String lang, int limit, int expectedResults) {
+ List<TextHit> result = classToTest.query(label, queryString, null, lang, limit);
+ Assert.assertNotNull(result);
+ Assert.assertEquals(expectedResults, result.size());
+ }
+
+
+ @Test
public void testDeleteEntity() {
testAddEntity();
String labelKey = "label";
String labelValue = "this is a sample Label";
//Now Delete the entity
- classToTest.deleteEntity(entity("http://example/x3", labelKey, labelValue));
+ classToTest.deleteEntity(entity("http://example/x5", labelKey, labelValue));
//Try to find it
- GetResponse response = transportClient.prepareGet(INDEX_NAME, DOC_TYPE, "http://example/x3").get();
+ GetResponse response = transportClient.prepareGet(INDEX_NAME, DOC_TYPE, "http://example/x5").get();
//It Should Exist
Assert.assertTrue(response.isExists());
//But the field value should now be empty
- Assert.assertEquals("http://example/x3", response.getId());
+ Assert.assertEquals("http://example/x5", response.getId());
Assert.assertTrue(response.getSource().containsKey(labelKey));
Assert.assertEquals(0, ((List<?>)response.getSource().get(labelKey)).size());
}
@@ -136,7 +318,7 @@ public class TextIndexESIT extends BaseESTest {
public void testGet() {
testAddEntity();
//Now Get the same entity
- Map<String, Node> response = classToTest.get("http://example/x3");
+ Map<String, Node> response = classToTest.get("http://example/x5");
Assert.assertNotNull(response);
Assert.assertEquals(2, response.size());
}