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>