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 al...@apache.org on 2013/05/15 10:35:32 UTC
svn commit: r1482722 - in /jackrabbit/oak/trunk/oak-lucene: pom.xml
src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryJcrTest.java
Author: alexparvulescu
Date: Wed May 15 08:35:31 2013
New Revision: 1482722
URL: http://svn.apache.org/r1482722
Log:
OAK-819 Lucene fulltext on node not working properly - WIP
Modified:
jackrabbit/oak/trunk/oak-lucene/pom.xml
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryJcrTest.java
Modified: jackrabbit/oak/trunk/oak-lucene/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/pom.xml?rev=1482722&r1=1482721&r2=1482722&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-lucene/pom.xml Wed May 15 08:35:31 2013
@@ -36,7 +36,12 @@
<tika.version>1.3</tika.version>
<lucene.version>4.2.0</lucene.version>
<known.issues>
- org.apache.jackrabbit.core.query.FulltextQueryTest <!-- OAK-819 -->
+ org.apache.jackrabbit.core.query.FulltextQueryTest#testFulltextExcludeSQL <!-- OAK-819 -->
+ org.apache.jackrabbit.core.query.FulltextQueryTest#testFulltextOrSQL <!-- OAK-819 -->
+ org.apache.jackrabbit.core.query.FulltextQueryTest#testFulltextIntercapSQL <!-- OAK-819 -->
+ org.apache.jackrabbit.core.query.FulltextQueryTest#testContainsPropScopeSQL <!-- OAK-819 -->
+ org.apache.jackrabbit.core.query.FulltextQueryTest#testContainsPropScopeXPath <!-- OAK-819 -->
+ org.apache.jackrabbit.core.query.FulltextQueryTest#testMultiByte <!-- OAK-819 -->
org.apache.jackrabbit.core.query.JoinTest#testJoinWithOR4 <!-- OAK-819 -->
org.apache.jackrabbit.core.query.JoinTest#testJoinWithOR5 <!-- OAK-819 -->
</known.issues>
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java?rev=1482722&r1=1482721&r2=1482722&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java Wed May 15 08:35:31 2013
@@ -35,6 +35,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import org.apache.jackrabbit.oak.api.Type;
@@ -55,7 +56,7 @@ import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
-import org.apache.lucene.search.MultiPhraseQuery;
+import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.search.PrefixQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
@@ -353,38 +354,41 @@ public class LuceneIndex implements Full
.iterator().next().toLowerCase());
if (tokens.size() == 1) {
String token = tokens.get(0);
- Query q = null;
if (token.contains(" ")) {
- // q = new WildcardQuery(newFulltextTerm(token));
- // PhraseQuery pq = new PhraseQuery();
- // pq.add(newFulltextTerm(token));
- // q = pq;
+ PhraseQuery pq = new PhraseQuery();
+ for (String t : token.split(" ")) {
+ pq.add(newFulltextTerm(t));
+ }
+ qs.add(pq);
} else {
- q = new WildcardQuery(newFulltextTerm(token
- + WildcardQuery.WILDCARD_STRING));
- }
- if (q != null) {
- qs.add(q);
+ if (!token.endsWith("*")) {
+ token = token + "*";
+ }
+ qs.add(new WildcardQuery(newFulltextTerm(token)));
}
return;
}
BooleanQuery q = new BooleanQuery();
- for (String token : tokens) {
- q.add(new TermQuery(newFulltextTerm(token)), MUST);
- // if (token.contains(" ")) {
- // // q = new WildcardQuery(newFulltextTerm(token));
- // // PhraseQuery pq = new PhraseQuery();
- // // pq.add(newFulltextTerm(token));
- // // q = pq;
- // } else {
- // q = new WildcardQuery(newFulltextTerm(token
- // + WildcardQuery.WILDCARD_STRING));
- // }
+ Iterator<String> iterator = tokens.iterator();
+ while (iterator.hasNext()) {
+ String token = iterator.next();
+ q.add(tokenToQuery(token), MUST);
}
qs.add(q);
}
+ private static Query tokenToQuery(String token) {
+ if (token.contains(" ")) {
+ PhraseQuery pq = new PhraseQuery();
+ for (String t : token.split(" ")) {
+ pq.add(newFulltextTerm(t));
+ }
+ return pq;
+ }
+ return new TermQuery(newFulltextTerm(token));
+ }
+
/**
*
* inspired from lucene's WildcardQuery#toAutomaton
@@ -398,6 +402,7 @@ public class LuceneIndex implements Full
int length = Character.charCount(c);
switch (c) {
case ' ':
+ case '&':
if (quote) {
token.append(' ');
} else if (token.length() > 0) {
@@ -406,6 +411,7 @@ public class LuceneIndex implements Full
}
break;
case '"':
+ case '\'':
if (quote) {
quote = false;
if (token.length() > 0) {
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryJcrTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryJcrTest.java?rev=1482722&r1=1482721&r2=1482722&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryJcrTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryJcrTest.java Wed May 15 08:35:31 2013
@@ -26,6 +26,7 @@ import org.apache.jackrabbit.core.query.
import org.apache.jackrabbit.core.query.LimitAndOffsetTest;
import org.apache.jackrabbit.core.query.MixinTest;
import org.apache.jackrabbit.core.query.OrderByTest;
+import org.apache.jackrabbit.core.query.ParentNodeTest;
import org.apache.jackrabbit.core.query.PathQueryNodeTest;
import org.apache.jackrabbit.core.query.SQL2NodeLocalNameTest;
import org.apache.jackrabbit.core.query.SQL2OffsetLimitTest;
@@ -39,24 +40,24 @@ public class QueryJcrTest extends TestCa
public static Test suite() {
TestSuite suite = new ConcurrentTestSuite(
"Jackrabbit query tests using a Lucene based index");
- suite.addTestSuite(FulltextQueryTest.class);
- suite.addTestSuite(SQLTest.class);
- suite.addTestSuite(JoinTest.class);
- suite.addTestSuite(SkipDeletedNodesTest.class);
- suite.addTestSuite(PathQueryNodeTest.class);
- suite.addTestSuite(FulltextSQL2QueryTest.class);
- suite.addTestSuite(SQL2NodeLocalNameTest.class);
- suite.addTestSuite(MixinTest.class);
- suite.addTestSuite(SQL2OuterJoinTest.class);
- suite.addTestSuite(SQL2OffsetLimitTest.class);
- suite.addTestSuite(LimitAndOffsetTest.class);
+ suite.addTestSuite(FulltextQueryTest.class);
+ suite.addTestSuite(SQLTest.class);
+ suite.addTestSuite(JoinTest.class);
+ suite.addTestSuite(SkipDeletedNodesTest.class);
+ suite.addTestSuite(PathQueryNodeTest.class);
+ suite.addTestSuite(FulltextSQL2QueryTest.class);
+ suite.addTestSuite(SQL2NodeLocalNameTest.class);
+ suite.addTestSuite(MixinTest.class);
+ suite.addTestSuite(SQL2OuterJoinTest.class);
+ suite.addTestSuite(SQL2OffsetLimitTest.class);
+ suite.addTestSuite(LimitAndOffsetTest.class);
suite.addTestSuite(OrderByTest.class);
+ suite.addTestSuite(ParentNodeTest.class);
// FAILURES
//
// suite.addTestSuite(SQL2OrderByTest.class); // order by score is not stable
// suite.addTestSuite(QueryResultTest.class); // OAK-484
- // suite.addTestSuite(ParentNodeTest.class); // OAK-309
// suite.addTestSuite(ExcerptTest.class); // OAK-318
// suite.addTestSuite(SimilarQueryTest.class); // OAK-319
// suite.addTestSuite(DerefTest.class); // OAK-321