From: <br...@us...> - 2007-10-31 13:59:00
|
Revision: 6830 http://exist.svn.sourceforge.net/exist/?rev=6830&view=rev Author: brihaye Date: 2007-10-31 06:58:52 -0700 (Wed, 31 Oct 2007) Log Message: ----------- Fixed use of QNames when no QName index is defined (fallback to generic one). To be improved later. Modified Paths: -------------- branches/meshram/eXist/extensions/indexes/fulltext/src/org/exist/indexing/fulltext/FTIndexWorker.java branches/meshram/eXist/extensions/indexes/fulltext/src/org/exist/xquery/modules/fulltext/MatchRegexp.java Modified: branches/meshram/eXist/extensions/indexes/fulltext/src/org/exist/indexing/fulltext/FTIndexWorker.java =================================================================== --- branches/meshram/eXist/extensions/indexes/fulltext/src/org/exist/indexing/fulltext/FTIndexWorker.java 2007-10-31 08:38:08 UTC (rev 6829) +++ branches/meshram/eXist/extensions/indexes/fulltext/src/org/exist/indexing/fulltext/FTIndexWorker.java 2007-10-31 13:58:52 UTC (rev 6830) @@ -1020,14 +1020,23 @@ final NodeSet result = new ExtArrayNodeSet(docs.getLength(), 250); final Lock lock = index.db.getLock(); for (Iterator iter = docs.getCollectionIterator(); iter.hasNext();) { - final int collectionId = ((Collection) iter.next()).getId(); + Collection collection = (Collection) iter.next(); + final int collectionId = collection.getId(); + boolean hasQNamedIndex = false; + IndexSpec idxConf = collection.getIndexConfiguration(context.getBroker()); + if (idxConf != null) { + FTIndexConfig config = (FTIndexConfig)idxConf.getCustomIndexSpec(FTIndex.ID); + if (config != null) { + hasQNamedIndex = !config.qnameSpecs.isEmpty(); + } + } //No QName hints ; try to get the defined indexes for this collection if (qnames == null || qnames.isEmpty()) qnames = getIndexesOnQnames(context.getBroker(), docs); else { //We somehow would like to work on an intersection of the defined QNames and of the passed QNames } - if (qnames != null) { + if (qnames != null && !qnames.isEmpty() && hasQNamedIndex) { for (int q = 0; q < qnames.size(); q++) { QName qname = (QName)qnames.get(q); IndexQuery query = null; Modified: branches/meshram/eXist/extensions/indexes/fulltext/src/org/exist/xquery/modules/fulltext/MatchRegexp.java =================================================================== --- branches/meshram/eXist/extensions/indexes/fulltext/src/org/exist/xquery/modules/fulltext/MatchRegexp.java 2007-10-31 08:38:08 UTC (rev 6829) +++ branches/meshram/eXist/extensions/indexes/fulltext/src/org/exist/xquery/modules/fulltext/MatchRegexp.java 2007-10-31 13:58:52 UTC (rev 6830) @@ -376,7 +376,12 @@ FTIndexWorker index = (FTIndexWorker) context.getBroker().getIndexController().getWorkerByIndexId(FTIndex.ID); NodeSet hits[] = new NodeSet[terms.size()]; - Map hints = new HashMap(); + Map hints = new HashMap(); + List qnames = new ArrayList(); + if (qname != null) { + qnames.add(qname); + hints.put(FTIndexWorker.QNAMES_KEY, qnames); + } TermMatcher matcher; for (int k = 0; k < terms.size(); k++) { String token = (String) terms.get(k); @@ -408,8 +413,7 @@ throw new XPathException(e); } hints.put(FTIndexWorker.TOKEN_MATCHER, matcher); - hints.put(FTIndexWorker.START_VALUE, token); - hints.put(FTIndexWorker.QNAMES_KEY, qname); + hints.put(FTIndexWorker.START_VALUE, token); hints.put(FTIndexWorker.KEY_SEARCH_TYPE, FTIndexWorker.SEARCH_EXACT); //hits[k] = index.searchExact(context, contextId, docs, contextSet, axis, hints); hits[k] = index.search2(context, contextId, docs, contextSet, axis, hints); @@ -442,8 +446,7 @@ throw new XPathException(e); } hints.put(FTIndexWorker.TOKEN_MATCHER, matcher); - hints.put(FTIndexWorker.START_VALUE, start); - hints.put(FTIndexWorker.QNAMES_KEY, qname); + hints.put(FTIndexWorker.START_VALUE, start); hints.put(FTIndexWorker.KEY_SEARCH_TYPE, FTIndexWorker.GET_NODES); //hits[k] = index.getNodes(context, contextId, docs, contextSet, axis, hints); hits[k] = index.search2(context, contextId, docs, contextSet, axis, hints); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |