You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Thomas Mueller (JIRA)" <ji...@apache.org> on 2015/04/09 11:17:12 UTC
[jira] [Created] (OAK-2733) Option to convert "like" queries to
range queries
Thomas Mueller created OAK-2733:
-----------------------------------
Summary: Option to convert "like" queries to range queries
Key: OAK-2733
URL: https://issues.apache.org/jira/browse/OAK-2733
Project: Jackrabbit Oak
Issue Type: Improvement
Reporter: Thomas Mueller
Assignee: Thomas Mueller
Fix For: 1.3.0
Queries with "like" conditions of the form "x like 'abc%'" are currently always converted to range queries. With Apache Lucene, using "like" in some cases is a bit faster (but not much, according to our tests).
Converting "like" to range queries should be disabled by default.
Potential patch:
{noformat}
--- src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java (revision 1672070)
+++ src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java (working copy)
@@ -31,11 +31,21 @@
import org.apache.jackrabbit.oak.query.fulltext.LikePattern;
import org.apache.jackrabbit.oak.query.index.FilterImpl;
import org.apache.jackrabbit.oak.spi.query.PropertyValues;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A comparison operation (including "like").
*/
public class ComparisonImpl extends ConstraintImpl {
+
+ static final Logger LOG = LoggerFactory.getLogger(ComparisonImpl.class);
+
+ private final static boolean CONVERT_LIKE_TO_RANGE = Boolean.getBoolean("oak.convertLikeToRange");
+
+ static {
+ LOG.info("Converting like to range queries is " + (CONVERT_LIKE_TO_RANGE ? "enabled" : "disabled"));
+ }
private final DynamicOperandImpl operand1;
private final Operator operator;
@@ -193,7 +203,7 @@
if (lowerBound.equals(upperBound)) {
// no wildcards
operand1.restrict(f, Operator.EQUAL, v);
- } else if (operand1.supportsRangeConditions()) {
+ } else if (operand1.supportsRangeConditions() && CONVERT_LIKE_TO_RANGE) {
if (lowerBound != null) {
PropertyValue pv = PropertyValues.newString(lowerBound);
operand1.restrict(f, Operator.GREATER_OR_EQUAL, pv);
@@ -203,7 +213,7 @@
operand1.restrict(f, Operator.LESS_OR_EQUAL, pv);
}
} else {
- // path conditions
+ // path conditions, or conversion is disabled
operand1.restrict(f, operator, v);
}
} else {
{noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)