You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by to...@apache.org on 2015/07/22 15:50:58 UTC
svn commit: r1692274 - in /jackrabbit/oak/trunk/oak-solr-core/src:
main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/
main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/
test/java/org/apache/jackrabbit/oak/jcr/query/ test/java/org/a...
Author: tommaso
Date: Wed Jul 22 13:50:57 2015
New Revision: 1692274
URL: http://svn.apache.org/r1692274
Log:
OAK-3135 - solr should be used for path restrictions only with ft/property restrictions
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParserTest.java
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java?rev=1692274&r1=1692273&r2=1692274&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java Wed Jul 22 13:50:57 2015
@@ -77,8 +77,6 @@ public class SolrServerProviderService i
private String serverType;
private SolrServer cachedSolrServer;
- private SolrServer cachedSearchingSolrServer;
- private SolrServer cachedIndexingSolrServer;
@Activate
protected void activate(ComponentContext context) throws Exception {
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java?rev=1692274&r1=1692273&r2=1692274&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java Wed Jul 22 13:50:57 2015
@@ -126,11 +126,20 @@ public class SolrQueryIndex implements F
match++; // full text queries have usually a significant recall
}
+ // property restriction OR native language property restriction defined AND property restriction handled
+ if (filter.getPropertyRestrictions() != null && filter.getPropertyRestrictions().size() > 0
+ && (filter.getPropertyRestriction(NATIVE_SOLR_QUERY) != null || filter.getPropertyRestriction(NATIVE_LUCENE_QUERY) != null
+ || configuration.useForPropertyRestrictions()) && !hasIgnoredProperties(filter.getPropertyRestrictions(), configuration)) {
+ match++;
+ }
+
// path restriction defined AND path restrictions handled
if (filter.getPathRestriction() != null &&
!Filter.PathRestriction.NO_RESTRICTION.equals(filter.getPathRestriction())
&& configuration.useForPathRestrictions()) {
- match++;
+ if (match > 0) {
+ match++;
+ }
}
// primary type restriction defined AND primary type restriction handled
@@ -138,12 +147,7 @@ public class SolrQueryIndex implements F
match++;
}
- // property restriction OR native language property restriction defined AND property restriction handled
- if (filter.getPropertyRestrictions() != null && filter.getPropertyRestrictions().size() > 0
- && (filter.getPropertyRestriction(NATIVE_SOLR_QUERY) != null || filter.getPropertyRestriction(NATIVE_LUCENE_QUERY) != null
- || configuration.useForPropertyRestrictions()) && !hasIgnoredProperties(filter.getPropertyRestrictions(), configuration)) {
- match++;
- }
+
return match;
}
Modified: jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java?rev=1692274&r1=1692273&r2=1692274&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java Wed Jul 22 13:50:57 2015
@@ -123,6 +123,27 @@ public class QueryFulltextTest extends A
assertEquals("/testroot", getResult(q.execute(), "path"));
}
+ public void testInValues() throws Exception {
+
+ Session session = superuser;
+ QueryManager qm = session.getWorkspace().getQueryManager();
+ Node n1 = testRootNode.addNode("node1");
+ n1.setProperty("text", "hello");
+ Node n2 = testRootNode.addNode("node2");
+ n2.setProperty("text", "hallo");
+ Node n3 = testRootNode.addNode("node3");
+ n3.setProperty("text", "hello hallo");
+ session.save();
+
+ String sql2 = "select [jcr:path] as [path], [jcr:score], * from [nt:base] as a " +
+ "where [text] in('hello', 'hallo')";
+
+ Query q = qm.createQuery(sql2, Query.JCR_SQL2);
+ String path = getResult(q.execute(), "path");
+ assertEquals("/testroot/node1, /testroot/node2", path);
+
+ }
+
static String getResult(QueryResult result, String propertyName) throws RepositoryException {
StringBuilder buff = new StringBuilder();
RowIterator it = result.getRows();
Modified: jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParserTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParserTest.java?rev=1692274&r1=1692273&r2=1692274&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParserTest.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParserTest.java Wed Jul 22 13:50:57 2015
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.plugins.index.solr.query;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.DefaultSolrConfiguration;
import org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
import org.apache.jackrabbit.oak.spi.query.Filter;
import org.apache.solr.client.solrj.SolrQuery;
@@ -24,6 +25,7 @@ import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
/**
* Testcase for {@link org.apache.jackrabbit.oak.plugins.index.solr.query.FilterQueryParser}
@@ -39,4 +41,25 @@ public class FilterQueryParserTest {
assertEquals("*:*", solrQuery.getQuery());
}
+ @Test
+ public void testAllChildrenQueryParsing() throws Exception {
+ String query = "select [jcr:path], [jcr:score], * from [nt:hierarchy] as a where isdescendantnode(a, '/')";
+ Filter filter = mock(Filter.class);
+ OakSolrConfiguration configuration = new DefaultSolrConfiguration(){
+ @Override
+ public boolean useForPathRestrictions() {
+ return true;
+ }
+ };
+ when(filter.getQueryStatement()).thenReturn(query);
+ Filter.PathRestriction pathRestriction = Filter.PathRestriction.ALL_CHILDREN;
+ when(filter.getPathRestriction()).thenReturn(pathRestriction);
+ when(filter.getPath()).thenReturn("/");
+ SolrQuery solrQuery = FilterQueryParser.getQuery(filter, null, configuration);
+ assertNotNull(solrQuery);
+ assertEquals(configuration.getFieldForPathRestriction(pathRestriction)+":\\/", solrQuery.get("q"));
+ }
+
+
+
}
Modified: jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java?rev=1692274&r1=1692273&r2=1692274&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java Wed Jul 22 13:50:57 2015
@@ -51,7 +51,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
- * Testcase for {@link org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex}
+ * Tests for {@link org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex}
*/
public class SolrQueryIndexTest {
@@ -66,7 +66,7 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "", new QueryEngineSettings());
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(Double.POSITIVE_INFINITY == cost);
+ assertEquals(Double.POSITIVE_INFINITY, cost, 0);
}
@Test
@@ -82,11 +82,11 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where isdescendantnode(a, '/test')", new QueryEngineSettings());
filter.restrictPath("/test", Filter.PathRestriction.ALL_CHILDREN);
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(Double.POSITIVE_INFINITY == cost);
+ assertEquals(Double.POSITIVE_INFINITY, cost, 0);
}
@Test
- public void testCostWithPathRestrictionsEnabled() throws Exception {
+ public void testCostWithOnlyPathRestrictionsEnabled() throws Exception {
NodeState root = mock(NodeState.class);
when(root.getNames(any(String.class))).thenReturn(Collections.<String>emptySet());
SelectorImpl selector = new SelectorImpl(root, "a");
@@ -103,7 +103,34 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where isdescendantnode(a, '/test')", new QueryEngineSettings());
filter.restrictPath("/test", Filter.PathRestriction.ALL_CHILDREN);
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(10 == cost);
+ assertEquals(Double.POSITIVE_INFINITY, cost, 0);
+ }
+
+ @Test
+ public void testCostWithPropertyAndPathRestrictionsEnabled() throws Exception {
+ NodeState root = mock(NodeState.class);
+ when(root.getNames(any(String.class))).thenReturn(Collections.<String>emptySet());
+ SelectorImpl selector = new SelectorImpl(root, "a");
+
+ SolrServer solrServer = mock(SolrServer.class);
+ OakSolrConfiguration configuration = new DefaultSolrConfiguration() {
+ @Override
+ public boolean useForPathRestrictions() {
+ return true;
+ }
+
+ @Override
+ public boolean useForPropertyRestrictions() {
+ return true;
+ }
+ };
+ SolrQueryIndex solrQueryIndex = new SolrQueryIndex("solr", solrServer, configuration);
+
+ FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where isdescendantnode(a, '/test')", new QueryEngineSettings());
+ filter.restrictPath("/test", Filter.PathRestriction.ALL_CHILDREN);
+ filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar"));
+ double cost = solrQueryIndex.getCost(filter, root);
+ assertEquals(5, cost, 0);
}
@Test
@@ -119,7 +146,7 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where name = 'hello')", new QueryEngineSettings());
filter.restrictProperty("name", Operator.EQUAL, PropertyValues.newString("hello"));
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(Double.POSITIVE_INFINITY == cost);
+ assertEquals(Double.POSITIVE_INFINITY, cost, 0);
}
@Test
@@ -140,7 +167,7 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where name = 'hello')", new QueryEngineSettings());
filter.restrictProperty("name", Operator.EQUAL, PropertyValues.newString("hello"));
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(10 == cost);
+ assertEquals(10, cost, 0);
}
@Test
@@ -156,7 +183,7 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where jcr:primaryType = 'nt:unstructured')", new QueryEngineSettings());
filter.restrictProperty("jcr:primaryType", Operator.EQUAL, PropertyValues.newString("nt:unstructured"));
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(Double.POSITIVE_INFINITY == cost);
+ assertEquals(Double.POSITIVE_INFINITY, cost, 0);
}
@Test
@@ -177,7 +204,7 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where jcr:primaryType = 'nt:unstructured')", new QueryEngineSettings());
filter.restrictProperty("jcr:primaryType", Operator.EQUAL, PropertyValues.newString("nt:unstructured"));
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(10 == cost);
+ assertEquals(10, cost, 0);
}
@Test
@@ -204,7 +231,7 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where name = 'hello')", new QueryEngineSettings());
filter.restrictProperty("name", Operator.EQUAL, PropertyValues.newString("hello"));
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(Double.POSITIVE_INFINITY == cost);
+ assertEquals(Double.POSITIVE_INFINITY, cost, 0);
}
@Test
@@ -231,7 +258,7 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where name = 'hello')", new QueryEngineSettings());
filter.restrictProperty("name", Operator.EQUAL, PropertyValues.newString("hello"));
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(Double.POSITIVE_INFINITY == cost);
+ assertEquals(Double.POSITIVE_INFINITY, cost, 0);
}
@Test
@@ -258,7 +285,7 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, "select * from [nt:base] as a where name = 'hello')", new QueryEngineSettings());
filter.restrictProperty("name", Operator.EQUAL, PropertyValues.newString("hello"));
double cost = solrQueryIndex.getCost(filter, root);
- assertTrue(10 == cost);
+ assertEquals(10, cost, 0);
}
@Test