From 67aa372666bb6edfac51f1b56ba41f39a87fa343 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Fri, 30 Jul 2021 14:45:19 +0200 Subject: [PATCH] make cql.allIndexes configurable --- .../ElasticsearchFilterGenerator.java | 17 ++++++++++------- .../ElasticsearchQueryGenerator.java | 13 ++++++++----- .../elasticsearch/ElasticsearchQueryTest.java | 14 +++++++------- gradle.properties | 2 +- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchFilterGenerator.java b/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchFilterGenerator.java index 02975e6..48bd7c8 100644 --- a/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchFilterGenerator.java +++ b/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchFilterGenerator.java @@ -41,15 +41,18 @@ public class ElasticsearchFilterGenerator implements Visitor { private final ElasticsearchQueryModel model; - private Stack stack; + private final Stack stack; + + private final String globalField; private FilterGenerator filterGen; - public ElasticsearchFilterGenerator() { - this(new ElasticsearchQueryModel()); + public ElasticsearchFilterGenerator(String globalField) { + this(globalField, new ElasticsearchQueryModel()); } - public ElasticsearchFilterGenerator(ElasticsearchQueryModel model) { + public ElasticsearchFilterGenerator(String globalField, ElasticsearchQueryModel model) { + this.globalField = globalField; this.model = model; this.stack = new Stack<>(); try { @@ -84,7 +87,7 @@ public class ElasticsearchFilterGenerator implements Visitor { node.getQuery().accept(this); Node querynode = stack.pop(); if (querynode instanceof Token) { - filterGen.visit(new Expression(Operator.TERM_FILTER, new Name("cql.allIndexes"), querynode)); + filterGen.visit(new Expression(Operator.TERM_FILTER, new Name(globalField), querynode)); } else if (querynode instanceof Expression) { filterGen.visit(new Expression(Operator.QUERY_FILTER, (Expression) querynode)); } @@ -152,7 +155,7 @@ public class ElasticsearchFilterGenerator implements Visitor { Node esnode = stack.pop(); // add default context if node is a literal without a context if (esnode instanceof Token && TokenType.STRING.equals(esnode.getType())) { - esnode = new Expression(Operator.ALL, new Name("cql.allIndexes"), esnode); + esnode = new Expression(Operator.ALL, new Name(globalField), esnode); } if (stack.isEmpty()) { // unary expression @@ -162,7 +165,7 @@ public class ElasticsearchFilterGenerator implements Visitor { Node esnode2 = stack.pop(); // add default context if node is a literal without context if (esnode2 instanceof Token && TokenType.STRING.equals(esnode2.getType())) { - esnode2 = new Expression(Operator.ALL, new Name("cql.allIndexes"), esnode2); + esnode2 = new Expression(Operator.ALL, new Name(globalField), esnode2); } esnode = new Expression(op, esnode2, esnode); } diff --git a/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchQueryGenerator.java b/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchQueryGenerator.java index 139ced7..8396cff 100644 --- a/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchQueryGenerator.java +++ b/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchQueryGenerator.java @@ -69,11 +69,14 @@ public class ElasticsearchQueryGenerator implements Visitor { private XContentBuilder sort; - public ElasticsearchQueryGenerator() throws IOException { + private String globalField; + + public ElasticsearchQueryGenerator(String globalField) throws IOException { + this.globalField = globalField; this.from = 0; this.size = 10; this.model = new ElasticsearchQueryModel(); - this.filterGenerator = new ElasticsearchFilterGenerator(model); + this.filterGenerator = new ElasticsearchFilterGenerator(globalField, model); this.stack = new Stack<>(); this.sourceGen = new SourceGenerator(); this.queryGen = new QueryGenerator(); @@ -167,7 +170,7 @@ public class ElasticsearchQueryGenerator implements Visitor { Token token = (Token) querynode; querynode = ".".equals(token.getString()) ? new Expression(Operator.MATCH_ALL) : - new Expression(Operator.EQUALS, new Name("cql.allIndexes"), querynode); + new Expression(Operator.EQUALS, new Name(globalField), querynode); } queryGen.visit((Expression) querynode); if (model.hasFilter() && model.getFilterExpression() != null) { @@ -276,7 +279,7 @@ public class ElasticsearchQueryGenerator implements Visitor { Node esnode = stack.pop(); // add default context if node is a literal without a context if (esnode instanceof Token && TokenType.STRING.equals(esnode.getType())) { - esnode = new Expression(Operator.EQUALS, new Name("cql.allIndexes"), esnode); + esnode = new Expression(Operator.EQUALS, new Name(globalField), esnode); } if (stack.isEmpty()) { // unary expression @@ -286,7 +289,7 @@ public class ElasticsearchQueryGenerator implements Visitor { Node esnode2 = stack.pop(); // add default context if node is a literal without context if (esnode2 instanceof Token && TokenType.STRING.equals(esnode2.getType())) { - esnode2 = new Expression(Operator.EQUALS, new Name("cql.allIndexes"), esnode2); + esnode2 = new Expression(Operator.EQUALS, new Name(globalField), esnode2); } esnode = new Expression(op, esnode2, esnode); } diff --git a/cql-elasticsearch/src/test/java/org/xbib/cql/elasticsearch/ElasticsearchQueryTest.java b/cql-elasticsearch/src/test/java/org/xbib/cql/elasticsearch/ElasticsearchQueryTest.java index 7f04101..2a529f6 100644 --- a/cql-elasticsearch/src/test/java/org/xbib/cql/elasticsearch/ElasticsearchQueryTest.java +++ b/cql-elasticsearch/src/test/java/org/xbib/cql/elasticsearch/ElasticsearchQueryTest.java @@ -25,7 +25,7 @@ class ElasticsearchQueryTest { String cql = "Jörg"; CQLParser parser = new CQLParser(cql); parser.parse(); - ElasticsearchFilterGenerator generator = new ElasticsearchFilterGenerator(); + ElasticsearchFilterGenerator generator = new ElasticsearchFilterGenerator("cql.allIndexes"); parser.getCQLQuery().accept(generator); String json = generator.getResult().string(); assertEquals(json, "{\"term\":{\"cql.allIndexes\":\"Jörg\"}}"); @@ -36,7 +36,7 @@ class ElasticsearchQueryTest { String cql = "dc.type = electronic"; CQLParser parser = new CQLParser(cql); parser.parse(); - ElasticsearchFilterGenerator generator = new ElasticsearchFilterGenerator(); + ElasticsearchFilterGenerator generator = new ElasticsearchFilterGenerator("cql.allIndexes"); parser.getCQLQuery().accept(generator); String json = generator.getResult().string(); assertEquals(json, "{\"query\":{\"term\":{\"dc.type\":\"electronic\"}}}"); @@ -47,7 +47,7 @@ class ElasticsearchQueryTest { String cql = "dc.type = electronic and dc.date = 2013"; CQLParser parser = new CQLParser(cql); parser.parse(); - ElasticsearchFilterGenerator generator = new ElasticsearchFilterGenerator(); + ElasticsearchFilterGenerator generator = new ElasticsearchFilterGenerator("cql.allIndexes"); parser.getCQLQuery().accept(generator); String json = generator.getResult().string(); assertEquals( @@ -61,7 +61,7 @@ class ElasticsearchQueryTest { String cql = "dc.format = online and dc.type = electronic and dc.date = 2013"; CQLParser parser = new CQLParser(cql); parser.parse(); - ElasticsearchFilterGenerator generator = new ElasticsearchFilterGenerator(); + ElasticsearchFilterGenerator generator = new ElasticsearchFilterGenerator("cql.allIndexes"); parser.getCQLQuery().accept(generator); String json = generator.getResult().string(); assertEquals( @@ -75,7 +75,7 @@ class ElasticsearchQueryTest { String cql = "Jörg"; CQLParser parser = new CQLParser(cql); parser.parse(); - ElasticsearchQueryGenerator generator = new ElasticsearchQueryGenerator(); + ElasticsearchQueryGenerator generator = new ElasticsearchQueryGenerator("cql.allIndexes"); generator.setBoostParams("boost", "log2p", 2.0f, "sum"); parser.getCQLQuery().accept(generator); String json = generator.getSourceResult(); @@ -92,7 +92,7 @@ class ElasticsearchQueryTest { String cql = "dc.format = book*"; CQLParser parser = new CQLParser(cql); parser.parse(); - ElasticsearchQueryGenerator generator = new ElasticsearchQueryGenerator(); + ElasticsearchQueryGenerator generator = new ElasticsearchQueryGenerator("cql.allIndexes"); parser.getCQLQuery().accept(generator); String json = generator.getSourceResult(); assertEquals("{\"from\":0,\"size\":10,\"query\":{\"simple_query_string\":" + @@ -130,7 +130,7 @@ class ElasticsearchQueryTest { private void validate(String cql, String expected) throws Exception { CQLParser parser = new CQLParser(cql); parser.parse(); - ElasticsearchQueryGenerator generator = new ElasticsearchQueryGenerator(); + ElasticsearchQueryGenerator generator = new ElasticsearchQueryGenerator("cql.allIndexes"); parser.getCQLQuery().accept(generator); String elasticsearchQuery = generator.getSourceResult(); assertEquals(expected, elasticsearchQuery); diff --git a/gradle.properties b/gradle.properties index e864746..0765ba2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ group = org.xbib name = cql -version = 3.1.1 +version = 3.1.2 gradle.wrapper.version = 6.6.1 xbib-content.version = 3.0.0