Author: amrverma
Date: Wed Nov 25 08:39:17 2020
New Revision: 1883816
URL: http://svn.apache.org/viewvc?rev=1883816&view=rev
Log:
OAK-9281: NRT Index - duplicate results with similarity search
(patch provided by Tom Blackford)
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/HybridIndexTest.java
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/HybridIndexTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/HybridIndexTest.java?rev=1883816&r1=1883815&r2=1883816&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/HybridIndexTest.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/HybridIndexTest.java
Wed Nov 25 08:39:17 2020
@@ -26,6 +26,7 @@ import java.io.InputStream;
import java.lang.management.ManagementFactory;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -216,6 +217,32 @@ public class HybridIndexTest extends Abs
}
@Test
+ public void testSimilarityQuery() throws Exception {
+ String idxName = "hybridtest";
+ Tree idx = createFulltextIndex(root.getTree("/"), idxName);
+ TestUtil.enableIndexingMode(idx,
FulltextIndexConstants.IndexingMode.NRT);
+ root.commit();
+ String query = "select [jcr:path] from [nt:base] where similar(.,
'/test/a')";
+
+ //Get initial indexing done as local indexing only work
+ //for incremental indexing
+ Tree test = root.getTree("/").addChild("test");
+ test.addChild("a").setProperty("text", "Hello World Hello World");
+ root.commit();
+ runAsyncIndex();
+ test = root.getTree("/").addChild("test");
+ test.addChild("b").setProperty("text", "Hello World");
+ test.addChild("c").setProperty("text", "World");
+ test.addChild("d").setProperty("text", "Hello");
+ root.commit();
+
+ //Now let some time elapse such that readers can be refreshed
+ clock.waitUntil(clock.getTime() + refreshDelta + 1);
+ List<String> result = executeQuery(query, "JCR-SQL2");
+ assertEquals(4, result.size());
+ }
+
+ @Test
public void noTextExtractionForSyncCommit() throws Exception{
String idxName = "hybridtest";
Tree idx = createFulltextIndex(root.getTree("/"), idxName);
Modified:
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java?rev=1883816&r1=1883815&r2=1883816&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
(original)
+++
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
Wed Nov 25 08:39:17 2020
@@ -412,29 +412,26 @@ public class FulltextIndexPlanner {
private IndexPlan.Builder getNativeFunctionPlanBuilder(String
indexingRuleBaseNodeType) {
boolean canHandleNativeFunction = true;
-
PropertyValue pv =
filter.getPropertyRestriction(definition.getFunctionName()).first;
String query = pv.getValue(Type.STRING);
-
+ // Suggestion and SpellCheck use virtual paths which are same for all
results
+ // so we must disable later filtering of unique paths
if (query.startsWith("suggest?term=")) {
if (definition.isSuggestEnabled()) {
canHandleNativeFunction =
indexingRuleBaseNodeType.equals(filter.getNodeType());
+ result.disableUniquePaths();
} else {
canHandleNativeFunction = false;
}
} else if (query.startsWith("spellcheck?term=")) {
if (definition.isSpellcheckEnabled()) {
canHandleNativeFunction =
indexingRuleBaseNodeType.equals(filter.getNodeType());
+ result.disableUniquePaths();
} else {
canHandleNativeFunction = false;
}
}
-
- //Suggestion and SpellCheck use virtual paths which is same for all
results
- if (canHandleNativeFunction) {
- result.disableUniquePaths();
- }
-
+
if (!canHandleNativeFunction) {
return null;
}