You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jd...@apache.org on 2008/12/13 07:18:38 UTC

svn commit: r726173 - in /archiva/branches/archiva-search-improvements: ./ archiva-modules/archiva-base/archiva-indexer/ archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/ archiva-modules/archiva-web/arc...

Author: jdumay
Date: Fri Dec 12 22:18:37 2008
New Revision: 726173

URL: http://svn.apache.org/viewvc?rev=726173&view=rev
Log:
Improved search results by filtering out duplicates and querying the database for versions on quicksearch

Modified:
    archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/pom.xml
    archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
    archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResultHit.java
    archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java
    archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
    archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
    archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag
    archiva/branches/archiva-search-improvements/pom.xml

Modified: archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/pom.xml
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/pom.xml?rev=726173&r1=726172&r2=726173&view=diff
==============================================================================
--- archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/pom.xml (original)
+++ archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/pom.xml Fri Dec 12 22:18:37 2008
@@ -41,6 +41,10 @@
       <artifactId>lucene-core</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-queries</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-spring</artifactId>
       <scope>test</scope>

Modified: archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java?rev=726173&r1=726172&r2=726173&view=diff
==============================================================================
--- archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java (original)
+++ archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java Fri Dec 12 22:18:37 2008
@@ -28,8 +28,11 @@
 import org.apache.lucene.queryParser.ParseException;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanFilter;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.DuplicateFilter;
 import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.FilterClause;
 import org.apache.lucene.search.Hits;
 import org.apache.lucene.search.MultiSearcher;
 import org.apache.lucene.search.Query;
@@ -46,6 +49,7 @@
 import org.apache.maven.archiva.indexer.bytecode.BytecodeHandlers;
 import org.apache.maven.archiva.indexer.bytecode.BytecodeKeys;
 import org.apache.maven.archiva.indexer.filecontent.FileContentHandlers;
+import org.apache.maven.archiva.indexer.filecontent.FileContentKeys;
 import org.apache.maven.archiva.indexer.hashcodes.HashcodesHandlers;
 import org.apache.maven.archiva.indexer.hashcodes.HashcodesKeys;
 import org.apache.maven.archiva.indexer.lucene.LuceneEntryConverter;
@@ -269,15 +273,22 @@
             // Create a multi-searcher for looking up the information.
             searcher = new MultiSearcher( searchables );
 
+            BooleanFilter booleanFilter = new BooleanFilter();
+            DuplicateFilter artifactIdDuplicateFilter = new DuplicateFilter(FileContentKeys.ARTIFACTID_EXACT);
+            booleanFilter.add(new FilterClause(artifactIdDuplicateFilter, BooleanClause.Occur.MUST));
+            DuplicateFilter groupIdDuplicateFilter = new DuplicateFilter(FileContentKeys.GROUPID_EXACT);
+            booleanFilter.add(new FilterClause(groupIdDuplicateFilter, BooleanClause.Occur.MUST));
+            
             // Perform the search.
             Hits hits = null;
             if ( filter != null )
             {
-                hits = searcher.search( specificQuery, filter );
+                booleanFilter.add(new FilterClause(filter, BooleanClause.Occur.MUST));
+                hits = searcher.search( specificQuery, booleanFilter );
             }
             else
             {
-                hits = searcher.search( specificQuery );
+                hits = searcher.search( specificQuery, booleanFilter );
             }
 
             int hitCount = hits.length();     

Modified: archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResultHit.java
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResultHit.java?rev=726173&r1=726172&r2=726173&view=diff
==============================================================================
--- archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResultHit.java (original)
+++ archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResultHit.java Fri Dec 12 22:18:37 2008
@@ -48,10 +48,9 @@
     
     private String repositoryId = "";
 
-    // Advanced hit, if artifact, all versions of artifact
-    private List artifacts = new ArrayList();
+    private List<String> versions = new ArrayList();
 
-    private List versions = new ArrayList();
+    private ArchivaArtifact artifact;
 
     public String getContext()
     {
@@ -88,11 +87,10 @@
         this.artifactId = artifactId;
     }
 
-    public void addArtifact( ArchivaArtifact artifact )
+    public void setArtifact( ArchivaArtifact artifact )
     {
-        this.artifacts.add( artifact );
-                
-        String ver = artifact.getVersion();        
+        this.artifact = artifact;
+        final String ver = artifact.getVersion();
 
         if ( !this.versions.contains( ver ) )
         {
@@ -115,9 +113,9 @@
         }
     }
 
-    public List getArtifacts()
+    public ArchivaArtifact getArtifact()
     {
-        return artifacts;
+        return artifact;
     }
 
     public String getGroupId()
@@ -135,11 +133,21 @@
         return version;
     }
 
-    public List getVersions()
+    public void setVersion(String version)
+    {
+        this.version = version;
+    }
+
+    public List<String> getVersions()
     {
         return versions;
     }
 
+    public void setVersions(List<String> versions)
+    {
+        this.versions = versions;
+    }
+
     public String getRepositoryId()
     {
         return repositoryId;

Modified: archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java?rev=726173&r1=726172&r2=726173&view=diff
==============================================================================
--- archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java (original)
+++ archiva/branches/archiva-search-improvements/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java Fri Dec 12 22:18:37 2008
@@ -40,7 +40,7 @@
 {
     private List repositories = new ArrayList();
 
-    private Map hits = new HashMap();
+    private Map<String, SearchResultHit> hits = new HashMap();
 
     private int totalHits;
 
@@ -82,7 +82,7 @@
         }
         
         hit.setRepositoryId( bytecode.getRepositoryId() );
-        hit.addArtifact( bytecode.getArtifact() );
+        hit.setArtifact( bytecode.getArtifact() );
         hit.setContext( null ); // TODO: provide context on why this is a valuable hit.
 
         this.hits.put( key, hit );
@@ -111,18 +111,16 @@
             hit = new SearchResultHit();
         }
 
-        hit.addArtifact( hashcodes.getArtifact() );
+        hit.setArtifact( hashcodes.getArtifact() );
         hit.setContext( null ); // TODO: provide context on why this is a valuable hit.
 
-        this.hits.put( key, hit );
+        hits.put( key, hit );
     }
 
     public void addFileContentHit( FileContentRecord filecontent )
     {
-        String key = filecontent.getPrimaryKey();
-
-        SearchResultHit hit = (SearchResultHit) this.hits.get( key );
-
+        final String key = filecontent.getPrimaryKey();
+        SearchResultHit hit = hits.get( key );
         if ( hit == null )
         {
             // Only need to worry about this hit if it is truely new.
@@ -135,7 +133,7 @@
             // Test for possible artifact reference ...
             if( filecontent.getArtifact() != null )
             {
-                hit.addArtifact( filecontent.getArtifact() );
+                hit.setArtifact( filecontent.getArtifact() );
             }
 
             this.hits.put( key, hit );
@@ -147,7 +145,7 @@
      * 
      * @return the list of {@link SearchResultHit} objects.
      */
-    public List getHits()
+    public List<SearchResultHit> getHits()
     {
         return new ArrayList( hits.values() );
     }

Modified: archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java?rev=726173&r1=726172&r2=726173&view=diff
==============================================================================
--- archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java (original)
+++ archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java Fri Dec 12 22:18:37 2008
@@ -46,6 +46,8 @@
 
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.Preparable;
+import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint;
+import org.apache.maven.archiva.indexer.search.SearchResultHit;
 
 /**
  * Search all indexed fields by the given criteria.
@@ -127,8 +129,6 @@
 
     private boolean fromResultsPage;
 
-    private int num;
-
     public boolean isFromResultsPage()
     {
         return fromResultsPage;
@@ -274,6 +274,18 @@
             buildCompleteQueryString( q );
         }
 
+        //Lets get the versions for the artifact we just found and display them
+        //Yes, this is in the lucene index but its more challenging to get them out when we are searching by project
+        for (SearchResultHit resultHit : results.getHits())
+        {
+            final List<String> versions = dao.query(new UniqueVersionConstraint(getObservableRepos(), resultHit.getGroupId(), resultHit.getArtifactId()));
+            if (versions != null && !versions.isEmpty())
+            {
+                resultHit.setVersion(null);
+                resultHit.setVersions(versions);
+            }
+        }
+
         return SUCCESS;
     }
 
@@ -329,7 +341,6 @@
         catch ( AccessDeniedException e )
         {
             getLogger().warn( e.getMessage(), e );
-            // TODO: pass this onto the screen.
         }
         catch ( ArchivaSecurityException e )
         {

Modified: archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp?rev=726173&r1=726172&r2=726173&view=diff
==============================================================================
--- archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp (original)
+++ archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp Fri Dec 12 22:18:37 2008
@@ -20,7 +20,7 @@
 <%@ taglib uri="/struts-tags" prefix="s" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
+<%@ taglib prefix="archiva" tagdir="/WEB-INF/tags" %>
 
 <html>
 <head>
@@ -135,10 +135,10 @@
                    <s:param name="className" value="%{#attr.className}"/>
                    <s:param name="repositoryId" value="%{#attr.repositoryId}"/>
                    <s:param name="filterSearch" value="%{#attr.filterSearch}"/>
-  		   <s:param name="fromResultsPage" value="true"/>
+                   <s:param name="fromResultsPage" value="true"/>
                    <s:param name="currentPage" value="%{#attr.currentPage - 1}"/>
- 		  <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
- 		  <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
+                   <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
+                   <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
                  </s:url>
        	      </c:set>
        	      <c:set var="nextPageUrl">
@@ -151,10 +151,10 @@
                   <s:param name="className" value="%{#attr.className}"/>
                   <s:param name="repositoryId" value="%{#attr.repositoryId}"/>
                   <s:param name="filterSearch" value="%{#attr.filterSearch}"/>
-  		  <s:param name="fromResultsPage" value="true"/>
+  		          <s:param name="fromResultsPage" value="true"/>
                   <s:param name="currentPage" value="%{#attr.currentPage + 1}"/>
- 		  <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
-		  <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
+ 		          <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
+		          <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
                 </s:url>
       	      </c:set>    
              </c:if>
@@ -259,12 +259,12 @@
               <c:choose>
                 <c:when test="${not empty (record.groupId)}">
                   <h3 class="artifact-title">
-                    <my:showArtifactTitle groupId="${record.groupId}" artifactId="${record.artifactId}"
-                                          version="${record.version}"/>
+
+                    <archiva:showArtifactTitle groupId="${record.groupId}" artifactId="${record.artifactId}"/>
                   </h3>
                   <p>
-                    <my:showArtifactLink groupId="${record.groupId}" artifactId="${record.artifactId}"
-                                         version="${record.version}" versions="${record.versions}" repositoryId="${record.repositoryId}"/>
+                    <archiva:showArtifactLink groupId="${record.groupId}" artifactId="${record.artifactId}"
+                                         versions="${record.versions}" repositoryId="${record.repositoryId}"/>
                   </p>
                 </c:when>
                 <c:otherwise>
@@ -292,12 +292,11 @@
               <c:choose>
                 <c:when test="${not empty (artifactModel.groupId)}">
                   <h3 class="artifact-title">
-                    <my:showArtifactTitle groupId="${artifactModel.groupId}" artifactId="${artifactModel.artifactId}"
-                                          version="${artifactModel.version}"/>
+                    <archiva:showArtifactTitle groupId="${artifactModel.groupId}" artifactId="${artifactModel.artifactId}"/>
                   </h3>
                   <p>
-                    <my:showArtifactLink groupId="${artifactModel.groupId}" artifactId="${artifactModel.artifactId}"
-                                         version="${artifactModel.version}" versions="${artifactModel.versions}"/>
+                    <archiva:showArtifactLink groupId="${artifactModel.groupId}" artifactId="${artifactModel.artifactId}"
+                                         versions="${artifactModel.versions}"/>
                   </p>
                 </c:when>
                 <c:otherwise>

Modified: archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag?rev=726173&r1=726172&r2=726173&view=diff
==============================================================================
--- archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag (original)
+++ archiva/branches/archiva-search-improvements/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag Fri Dec 12 22:18:37 2008
@@ -30,10 +30,7 @@
 <%@ attribute name="repositoryId" %>
 
 <span class="artifact-link">
-  <a href="${pageContext.request.contextPath}/repository/${repositoryId}">${repositoryId}</a>
-  <strong> : </strong>
-  <archiva:groupIdLink var="${groupId}" includeTop="false" />
-  
+  <archiva:groupIdLink var="${groupId}" includeTop="false" /> 
   <c:if test="${!empty (artifactId)}">    
     <c:set var="url">
       <s:url action="browseArtifact" namespace="/">

Modified: archiva/branches/archiva-search-improvements/pom.xml
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-search-improvements/pom.xml?rev=726173&r1=726172&r2=726173&view=diff
==============================================================================
--- archiva/branches/archiva-search-improvements/pom.xml (original)
+++ archiva/branches/archiva-search-improvements/pom.xml Fri Dec 12 22:18:37 2008
@@ -519,6 +519,11 @@
         <version>2.4.0</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.lucene</groupId>
+        <artifactId>lucene-queries</artifactId>
+        <version>2.4.0</version>
+      </dependency>
+      <dependency>
         <groupId>javax.mail</groupId>
         <artifactId>mail</artifactId>
         <version>1.4</version>