DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ· RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=35539>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ· INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=35539 Summary: New feature - version-aware Lucene searching Product: Slide Version: Nightly Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Search AssignedTo: slide-dev@jakarta.apache.org ReportedBy: [EMAIL PROTECTED] For now Slide doesn't perform version-aware Lucene searching. It indexes text for all file revisions, searches all revisions but only one revision is returned in query result. It is due to use of Set and ComparableResourceImpl classes. ComparableResourceImpl uses only URL to compare objects but Set objects must be unique and query result is constrained. I added revision support to ComparableResource class. With my patch it stores revision number for resources and revision number is significiant for comparing issues. Query result contains set of ComparableResourceImpl objects with revision information. Tomek Majchrzak --- src/share/org/apache/slide/search/RequestedResource.java 2005-06-24 12:33:58.000000000 +0200 +++ src/share/org/apache/slide/search/RequestedResource.java?rev=1.10 2005-06-29 10:00:18.465256424 +0200 @@ -28,7 +28,6 @@ import org.apache.slide.common.PropertyName; import org.apache.slide.content.NodeProperty; -import org.apache.slide.content.NodeRevisionNumber; import java.util.Iterator; @@ -48,14 +47,7 @@ * @throws SlideException */ public String getUri() throws SlideException; - - /** - * Returns the revision number of the resource. - * - * @return the revision number of resource - */ - public NodeRevisionNumber getRevisionNumber(); - + /** * Returns the property with the given <code>name</code> and * <code>namespace</code>. share/org/apache/slide/search/basic/ComparableResourceImpl.java --- src/share/org/apache/slide/search/basic/ComparableResourceImpl.java?rev=1.17 2005-06-24 13:02:32.000000000 +0200 +++ src/share/org/apache/slide/search/basic/ComparableResourceImpl.java 2005-06-29 11:31:28.000000000 +0200 @@ -39,6 +39,7 @@ import org.apache.slide.content.NodeRevisionContent; import org.apache.slide.content.NodeRevisionDescriptor; import org.apache.slide.content.NodeRevisionDescriptors; +import org.apache.slide.content.NodeRevisionNumber; import org.apache.slide.search.CompareHint; import org.apache.slide.search.PropertyProvider; import org.apache.slide.search.QueryScope; @@ -114,13 +115,31 @@ public ComparableResourceImpl (ObjectNode objectNode, SearchToken searchToken, QueryScope scope, PropertyProvider propertyProvider) throws SlideException { - this (objectNode, searchToken.getSlideToken(), searchToken.getContentHelper(), scope, propertyProvider); - this.searchToken = searchToken; + this (objectNode, searchToken, scope, propertyProvider, null); } + /** + * Constructs a RequestedResource. + * + * @param objectNode the ObjectNode for this resource + * @param searchToken the SearchToken for this request + * @param scope the scope of the query. + * @param propertyProvider the PropertyProvider to use (may be + * <code>null</code>). + * @param revisionNumber the revision number of this resource + * + * @throws BadQueryException + */ + public ComparableResourceImpl (ObjectNode objectNode, SearchToken searchToken, QueryScope scope, PropertyProvider propertyProvider, NodeRevisionNumber revisionNumber) + throws SlideException + { + this (objectNode, searchToken.getSlideToken(), searchToken.getContentHelper(), scope, propertyProvider, revisionNumber); + this.searchToken = searchToken; + } + // private boolean isCollection; - + /** * Constructs a RequestedResource. * @@ -130,10 +149,11 @@ * @param scope the scope of the query. * @param propertyProvider the PropertyProvider to use (may be * <code>null</code>). + * @param revisionNumber the revision number of this resource * * @throws BadQueryException */ - public ComparableResourceImpl (ObjectNode objectNode, SlideToken slideToken, Content contentHelper, QueryScope scope, PropertyProvider propertyProvider) throws SlideException { + public ComparableResourceImpl (ObjectNode objectNode, SlideToken slideToken, Content contentHelper, QueryScope scope, PropertyProvider propertyProvider, NodeRevisionNumber revisionNumber) throws SlideException { this.objectNode = objectNode; this.contentHelper = contentHelper; @@ -146,9 +166,12 @@ contentHelper.retrieve (slideToken, objectNode.getUri()); try { - revisionDescriptor = - contentHelper.retrieve (slideToken, revisionDescriptors); - + if (revisionNumber == null) + revisionDescriptor = + contentHelper.retrieve (slideToken, revisionDescriptors); + else + revisionDescriptor = + contentHelper.retrieve (slideToken, revisionDescriptors, revisionNumber); } catch (org.apache.slide.content.RevisionDescriptorNotFoundException e) { // The object doesn't have any revision, we create a dummy @@ -310,6 +333,15 @@ public String getUri() { return getInternalHref(); } + + /** + * Returns the revision number of the resource. + * + * @return the revision number of the resource. + */ + public NodeRevisionNumber getRevisionNumber() { + return revisionDescriptor.getRevisionNumber(); + } /** * Returns the property with the given <code>propertyName</code>. @@ -452,8 +484,9 @@ Comparable otherValue = (Comparable) otherResource.getThisValue (hint.getPropName(), hint.getPropNamespace()); Comparable thisValue = (Comparable) getThisValue (hint.getPropName(), hint.getPropNamespace()); - if (getInternalHref().equals (otherResource.getInternalHref())) - result = 0; + if (getInternalHref().equals (otherResource.getInternalHref()) && + (getRevisionNumber().equals(((ComparableResource)otherResource).getRevisionNumber()))) + result = 0; else if (thisValue != null && otherValue != null) { result = thisValue.compareTo(otherValue); @@ -653,7 +686,7 @@ } catch (SlideException e) {} if (getUri().equals (otherUri)) - return true; + return getRevisionNumber().equals(((ComparableResource)otherObject).getRevisionNumber()); else return false; } --- src/share/org/apache/slide/search/basic/OrderBy.java?rev=1.11 2005-06-28 08:45:46.000000000 +0200 +++ src/share/org/apache/slide/search/basic/OrderBy.java 2005-06-23 13:45:08.000000000 +0200 @@ -203,7 +203,8 @@ ComparableResource r2 = (ComparableResource)o2; int result = 0; - if (r1.getInternalHref().equals (r2.getInternalHref())) { + if (r1.getInternalHref().equals (r2.getInternalHref()) && + r1.getRevisionNumber().equals(r2.getRevisionNumber())) { result = 0; } else { --- src/stores/org/apache/slide/index/lucene/Index.java?rev=1.12 2005-06-28 08:49:28.000000000 +0200 +++ src/stores/org/apache/slide/index/lucene/Index.java 2005-06-23 12:45:34.000000000 +0200 @@ -65,6 +65,7 @@ { public static final String KEY_FIELD_NAME = "SLIDE_KEY"; public static final String URI_FIELD_NAME = "SLIDE_URI"; + public static final String REVISION_FIELD_NAME = "SLIDE_REVISION"; public static final String SCOPE_FIELD_NAME = "SLIDE_SCOPE"; public static final String DEPTH_FIELD_NAME = "SLIDE_DEPTH"; public static final String VERSION_FIELD_NAME = "SLIDE_VERSION"; @@ -221,6 +222,7 @@ doc.add(unstoredString(Index.KEY_FIELD_NAME, configuration.generateKey(uri, descriptor.getRevisionNumber()))); doc.add(storedString(Index.URI_FIELD_NAME, uri)); + doc.add(storedString(Index.REVISION_FIELD_NAME, descriptor.getRevisionNumber().toString())); // scopes StringTokenizer tokenizer = new StringTokenizer(uri, "/"); @@ -305,6 +307,7 @@ doc.add(unstoredString(Index.KEY_FIELD_NAME, configuration.generateKey(uri, descriptor.getRevisionNumber()))); doc.add(storedString(Index.URI_FIELD_NAME, uri)); + doc.add(storedString(Index.REVISION_FIELD_NAME, descriptor.getRevisionNumber().toString())); // scopes StringTokenizer tokenizer = new StringTokenizer(uri, "/"); --- src/stores/org/apache/slide/index/lucene/expressions/AbstractLuceneExpression.java?rev=1.2 2005-06-28 08:51:24.000000000 +0200 +++ src/stores/org/apache/slide/index/lucene/expressions/AbstractLuceneExpression.java 2005-06-23 12:46:30.000000000 +0200 @@ -53,6 +53,7 @@ import org.apache.slide.structure.ObjectNode; import org.apache.slide.structure.SubjectNode; import org.apache.slide.util.logger.Logger; +import org.apache.slide.content.NodeRevisionNumber; import org.jdom.Element; @@ -156,7 +157,9 @@ for (int i = 0, l = hits.length(); i < l; i++) { Document doc = hits.doc(i); String uri = doc.get(Index.URI_FIELD_NAME); - RequestedResource resource = createResource(uri); + String number = doc.get(Index.REVISION_FIELD_NAME); + NodeRevisionNumber nodeNumber = new NodeRevisionNumber(number); + RequestedResource resource = createResource(uri, nodeNumber); result.add(resource); } @@ -199,7 +202,7 @@ return new TermQuery(new Term(Index.SCOPE_FIELD_NAME, "/")); } - protected RequestedResource createResource(String uri) throws SearchException + protected RequestedResource createResource(String uri, NodeRevisionNumber nodeNumber) throws SearchException { ObjectNode node = new SubjectNode(uri); // this will return the root // folder @@ -208,7 +211,7 @@ try { resource = new ComparableResourceImpl(node, query.getSearchToken(), - query.getScope(), factory.getPropertyProvider()); + query.getScope(), factory.getPropertyProvider(), nodeNumber); } catch (SlideException e) { throw new SearchException(e); } --- src/webdav/server/org/apache/slide/webdav/util/ResourceWithProvidedProperties.java?rev=1.8 2005-06-29 12:29:31.706156920 +0200 +++ src/webdav/server/org/apache/slide/webdav/util/ResourceWithProvidedProperties.java 2005-06-24 12:42:49.000000000 +0200 @@ -33,6 +33,7 @@ import org.apache.slide.content.NodeProperty; import org.apache.slide.content.NodeRevisionDescriptor; import org.apache.slide.content.NodeRevisionDescriptors; +import org.apache.slide.content.NodeRevisionNumber; import org.apache.slide.search.PropertyProvider; import org.apache.slide.search.RequestedResource; @@ -89,7 +90,16 @@ public String getUri() { return revisionDescriptors.getOriginalUri(); } - + + /** + * Returns the revision number of the resource. + * + * @return the revision number of the resource. + */ + public NodeRevisionNumber getRevisionNumber() { + return revisionDescriptor.getRevisionNumber(); + } + /** * Returns the property with the given <code>propertyName</code>. * -- Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]