Return-Path: X-Original-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Delivered-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 952BDD824 for ; Wed, 3 Oct 2012 18:12:46 +0000 (UTC) Received: (qmail 18210 invoked by uid 500); 3 Oct 2012 18:12:46 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 18185 invoked by uid 500); 3 Oct 2012 18:12:46 -0000 Mailing-List: contact oak-commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: oak-dev@jackrabbit.apache.org Delivered-To: mailing list oak-commits@jackrabbit.apache.org Received: (qmail 18177 invoked by uid 99); 3 Oct 2012 18:12:46 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Oct 2012 18:12:46 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Oct 2012 18:12:45 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 0FA6A23889E1; Wed, 3 Oct 2012 18:12:02 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1393642 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java Date: Wed, 03 Oct 2012 18:12:01 -0000 To: oak-commits@jackrabbit.apache.org From: alexparvulescu@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20121003181202.0FA6A23889E1@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: alexparvulescu Date: Wed Oct 3 18:12:01 2012 New Revision: 1393642 URL: http://svn.apache.org/viewvc?rev=1393642&view=rev Log: OAK-358 QueryEngine Lucene Index support for reference search Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java?rev=1393642&r1=1393641&r2=1393642&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java Wed Oct 3 18:12:01 2012 @@ -53,6 +53,7 @@ import org.apache.jackrabbit.oak.spi.sta import org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.MultiFields; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.search.BooleanQuery; @@ -98,7 +99,7 @@ public class LuceneIndex implements Quer @Override public String getPlan(Filter filter, NodeState root) { - return getQuery(filter, root).toString(); + return getQuery(filter, root, null).toString(); } @Override @@ -124,7 +125,7 @@ public class LuceneIndex implements Quer IndexSearcher searcher = new IndexSearcher(reader); Collection paths = new ArrayList(); - Query query = getQuery(filter, root); + Query query = getQuery(filter, root, reader); if (query != null) { TopDocs docs = searcher .search(query, Integer.MAX_VALUE); @@ -153,7 +154,7 @@ public class LuceneIndex implements Quer } } - private static Query getQuery(Filter filter, NodeState root) { + private static Query getQuery(Filter filter, NodeState root, IndexReader reader) { List qs = new ArrayList(); try { @@ -233,7 +234,11 @@ public class LuceneIndex implements Quer if (JCR_PATH.equals(name)) { qs.add(new TermQuery(newPathTerm(first))); } else { - qs.add(new TermQuery(new Term(name, first))); + if ("*".equals(name)) { + addReferenceConstraint(first, qs, reader); + } else { + qs.add(new TermQuery(new Term(name, first))); + } } continue; } @@ -256,6 +261,23 @@ public class LuceneIndex implements Quer return bq; } + private static void addReferenceConstraint(String uuid, List qs, + IndexReader reader) { + if (reader == null) { + // getPlan call + qs.add(new TermQuery(new Term("*", uuid))); + return; + } + + // reference query + BooleanQuery bq = new BooleanQuery(); + Collection fields = MultiFields.getIndexedFields(reader); + for (String f : fields) { + bq.add(new TermQuery(new Term(f, uuid)), Occur.SHOULD); + } + qs.add(bq); + } + private static void addNodeTypeConstraints( List qs, String name, NodeState root) throws RepositoryException {