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();