replace match_phrase with simple query
This commit is contained in:
parent
67aa372666
commit
5abd384404
3 changed files with 21 additions and 21 deletions
|
@ -69,7 +69,7 @@ public class ElasticsearchQueryGenerator implements Visitor {
|
||||||
|
|
||||||
private XContentBuilder sort;
|
private XContentBuilder sort;
|
||||||
|
|
||||||
private String globalField;
|
private final String globalField;
|
||||||
|
|
||||||
public ElasticsearchQueryGenerator(String globalField) throws IOException {
|
public ElasticsearchQueryGenerator(String globalField) throws IOException {
|
||||||
this.globalField = globalField;
|
this.globalField = globalField;
|
||||||
|
@ -170,7 +170,7 @@ public class ElasticsearchQueryGenerator implements Visitor {
|
||||||
Token token = (Token) querynode;
|
Token token = (Token) querynode;
|
||||||
querynode = ".".equals(token.getString()) ?
|
querynode = ".".equals(token.getString()) ?
|
||||||
new Expression(Operator.MATCH_ALL) :
|
new Expression(Operator.MATCH_ALL) :
|
||||||
new Expression(Operator.EQUALS, new Name(globalField), querynode);
|
new Expression(Operator.ALL, new Name(globalField), querynode);
|
||||||
}
|
}
|
||||||
queryGen.visit((Expression) querynode);
|
queryGen.visit((Expression) querynode);
|
||||||
if (model.hasFilter() && model.getFilterExpression() != null) {
|
if (model.hasFilter() && model.getFilterExpression() != null) {
|
||||||
|
@ -279,7 +279,7 @@ public class ElasticsearchQueryGenerator implements Visitor {
|
||||||
Node esnode = stack.pop();
|
Node esnode = stack.pop();
|
||||||
// add default context if node is a literal without a context
|
// add default context if node is a literal without a context
|
||||||
if (esnode instanceof Token && TokenType.STRING.equals(esnode.getType())) {
|
if (esnode instanceof Token && TokenType.STRING.equals(esnode.getType())) {
|
||||||
esnode = new Expression(Operator.EQUALS, new Name(globalField), esnode);
|
esnode = new Expression(Operator.ALL, new Name(globalField), esnode);
|
||||||
}
|
}
|
||||||
if (stack.isEmpty()) {
|
if (stack.isEmpty()) {
|
||||||
// unary expression
|
// unary expression
|
||||||
|
@ -289,7 +289,7 @@ public class ElasticsearchQueryGenerator implements Visitor {
|
||||||
Node esnode2 = stack.pop();
|
Node esnode2 = stack.pop();
|
||||||
// add default context if node is a literal without context
|
// add default context if node is a literal without context
|
||||||
if (esnode2 instanceof Token && TokenType.STRING.equals(esnode2.getType())) {
|
if (esnode2 instanceof Token && TokenType.STRING.equals(esnode2.getType())) {
|
||||||
esnode2 = new Expression(Operator.EQUALS, new Name(globalField), esnode2);
|
esnode2 = new Expression(Operator.ALL, new Name(globalField), esnode2);
|
||||||
}
|
}
|
||||||
esnode = new Expression(op, esnode2, esnode);
|
esnode = new Expression(op, esnode2, esnode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,11 +122,8 @@ public class QueryGenerator implements Visitor {
|
||||||
Operator op = node.getOperator();
|
Operator op = node.getOperator();
|
||||||
switch (op.getArity()) {
|
switch (op.getArity()) {
|
||||||
case 0: {
|
case 0: {
|
||||||
switch (op) {
|
if (op == Operator.MATCH_ALL) {
|
||||||
case MATCH_ALL: {
|
builder.startObject("match_all").endObject();
|
||||||
builder.startObject("match_all").endObject();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -149,7 +146,7 @@ public class QueryGenerator implements Visitor {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case EQUALS: {
|
case EQUALS: {
|
||||||
String field = arg1.toString();
|
String field = arg1.toString();
|
||||||
String value = arg2 != null ? arg2.toString() : "";
|
String value = arg2 != null ? arg2.toString() : ""; // with quote
|
||||||
builder.startObject("simple_query_string")
|
builder.startObject("simple_query_string")
|
||||||
.field("query", value)
|
.field("query", value)
|
||||||
.field("fields", new String[]{field})
|
.field("fields", new String[]{field})
|
||||||
|
@ -160,20 +157,22 @@ public class QueryGenerator implements Visitor {
|
||||||
}
|
}
|
||||||
case NOT_EQUALS: {
|
case NOT_EQUALS: {
|
||||||
String field = arg1.toString();
|
String field = arg1.toString();
|
||||||
String value = arg2 != null ? arg2.toString() : "";
|
String value = arg2 != null ? arg2.toString() : ""; // with quote
|
||||||
builder.startObject("bool").startObject("must_not");
|
builder.startObject("bool")
|
||||||
builder.startObject("simple_query_string")
|
.startObject("must_not")
|
||||||
|
.startObject("simple_query_string")
|
||||||
.field("query", value)
|
.field("query", value)
|
||||||
.field("fields", new String[]{field})
|
.field("fields", new String[]{field})
|
||||||
.field("analyze_wildcard", true)
|
.field("analyze_wildcard", true)
|
||||||
.field("default_operator", "and")
|
.field("default_operator", "and")
|
||||||
|
.endObject()
|
||||||
|
.endObject()
|
||||||
.endObject();
|
.endObject();
|
||||||
builder.endObject().endObject();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ALL: {
|
case ALL: {
|
||||||
String field = arg1.toString();
|
String field = arg1.toString();
|
||||||
String value = tok2 != null ? tok2.getString() : "";
|
String value = tok2 != null ? tok2.getString() : ""; // always unquoted
|
||||||
builder.startObject("simple_query_string")
|
builder.startObject("simple_query_string")
|
||||||
.field("query", value)
|
.field("query", value)
|
||||||
.field("fields", new String[]{field})
|
.field("fields", new String[]{field})
|
||||||
|
@ -184,7 +183,7 @@ public class QueryGenerator implements Visitor {
|
||||||
}
|
}
|
||||||
case ANY: {
|
case ANY: {
|
||||||
String field = arg1.toString();
|
String field = arg1.toString();
|
||||||
String value = tok2 != null ? tok2.getString() : "";
|
String value = tok2 != null ? tok2.getString() : ""; // always unquoted
|
||||||
builder.startObject("simple_query_string")
|
builder.startObject("simple_query_string")
|
||||||
.field("query", value)
|
.field("query", value)
|
||||||
.field("fields", new String[]{field})
|
.field("fields", new String[]{field})
|
||||||
|
@ -204,11 +203,11 @@ public class QueryGenerator implements Visitor {
|
||||||
} else if (tok2.isBoundary()) {
|
} else if (tok2.isBoundary()) {
|
||||||
builder.startObject("prefix").field(field, value).endObject();
|
builder.startObject("prefix").field(field, value).endObject();
|
||||||
} else {
|
} else {
|
||||||
builder.startObject("match_phrase")
|
builder.startObject("simple_query_string")
|
||||||
.startObject(field)
|
|
||||||
.field("query", value)
|
.field("query", value)
|
||||||
.field("slop", 0)
|
.field("fields", new String[]{field})
|
||||||
.endObject()
|
.field("analyze_wildcard", true)
|
||||||
|
.field("default_operator", "and")
|
||||||
.endObject();
|
.endObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -373,4 +372,5 @@ public class QueryGenerator implements Visitor {
|
||||||
throw new SyntaxException("internal error while building elasticsearch query", e);
|
throw new SyntaxException("internal error while building elasticsearch query", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
group = org.xbib
|
group = org.xbib
|
||||||
name = cql
|
name = cql
|
||||||
version = 3.1.2
|
version = 3.1.3
|
||||||
|
|
||||||
gradle.wrapper.version = 6.6.1
|
gradle.wrapper.version = 6.6.1
|
||||||
xbib-content.version = 3.0.0
|
xbib-content.version = 3.0.0
|
||||||
|
|
Loading…
Reference in a new issue