Author: tommaso
Date: Wed Sep  2 07:58:16 2015
New Revision: 1700720

URL: http://svn.apache.org/r1700720
Log:
OAK-3331 - support multiple words spellchecking in lucene

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SpellcheckTest.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1700720&r1=1700719&r2=1700720&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
 Wed Sep  2 07:58:16 2015
@@ -27,6 +27,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
@@ -42,6 +44,9 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.util.PerfLogger;
 import org.apache.jackrabbit.util.ISO8601;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
+import org.apache.lucene.analysis.shingle.ShingleAnalyzerWrapper;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
@@ -70,7 +75,11 @@ public class LuceneIndexEditorContext {
         ClassLoader loader = thread.getContextClassLoader();
         thread.setContextClassLoader(IndexWriterConfig.class.getClassLoader());
         try {
-            IndexWriterConfig config = new IndexWriterConfig(VERSION, 
definition.getAnalyzer());
+            Analyzer definitionAnalyzer = definition.getAnalyzer();
+            Map<String, Analyzer> analyzers = new HashMap<String, Analyzer>();
+            analyzers.put(FieldNames.SPELLCHECK, new 
ShingleAnalyzerWrapper(LuceneIndexConstants.ANALYZER, 3));
+            Analyzer analyzer = new 
PerFieldAnalyzerWrapper(definitionAnalyzer, analyzers);
+            IndexWriterConfig config = new IndexWriterConfig(VERSION, 
analyzer);
             if (remoteDir) {
                 config.setMergeScheduler(new SerialMergeScheduler());
             }

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SpellcheckTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SpellcheckTest.java?rev=1700720&r1=1700719&r2=1700720&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SpellcheckTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SpellcheckTest.java
 Wed Sep  2 07:58:16 2015
@@ -66,6 +66,26 @@ public class SpellcheckTest extends Abst
         assertEquals("[hello, hold]", result);
     }
 
+    public void testSpellcheckMultipleWords() throws Exception {
+        Session session = superuser;
+        QueryManager qm = session.getWorkspace().getQueryManager();
+        Node n1 = testRootNode.addNode("node1");
+        n1.setProperty("jcr:title", "it is always a good idea to go visiting 
ontario");
+        Node n2 = testRootNode.addNode("node2");
+        n2.setProperty("jcr:title", "ontario is a nice place to live in");
+        Node n3 = testRootNode.addNode("node3");
+        n2.setProperty("jcr:title", "I flied to ontario for voting for the 
major polls");
+        Node n4 = testRootNode.addNode("node4");
+        n2.setProperty("jcr:title", "I will go voting in ontario, I always 
voted since I've been allowed to");
+        session.save();
+
+        String xpath = "/jcr:root[rep:spellcheck('votin in 
ontari')]/(rep:spellcheck())";
+        Query q = qm.createQuery(xpath, Query.XPATH);
+        String result = getResult(q.execute(), "rep:spellcheck()");
+        assertNotNull(result);
+        assertEquals("[voting in ontario]", result);
+    }
+
     static String getResult(QueryResult result, String propertyName) throws 
RepositoryException {
         StringBuilder buff = new StringBuilder();
         RowIterator it = result.getRows();


Reply via email to