Author: oching
Date: Wed Oct 22 23:31:39 2008
New Revision: 707291
URL: http://svn.apache.org/viewvc?rev=707291&view=rev
Log:
[MRM-981]
-fix query construction for advanced search
Added:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java?rev=707291&r1=707290&r2=707291&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
Wed Oct 22 23:31:39 2008
@@ -83,49 +83,69 @@
private ArchivaConfiguration configuration;
private List<ManagedRepositoryConfiguration> localIndexedRepositories =
new ArrayList<ManagedRepositoryConfiguration>();
-
+
public SearchResults executeFilteredSearch( String principal, List<String>
selectedRepos, String groupId,
String artifactId, String
version, String className,
SearchResultLimits limits )
{
List<RepositoryContentIndex> indexes = getBytecodeIndexes( principal,
selectedRepos );
- SearchResults results = new SearchResults();
- BooleanQuery booleanQuery = new BooleanQuery();
-
- if ( groupId != null && groupId.length() > 0 )
- {
- parseAndAdd( booleanQuery, ArtifactKeys.GROUPID, groupId, "\\.|-"
);
- }
-
- if ( artifactId != null && artifactId.length() > 0 )
- {
- parseAndAdd( booleanQuery, ArtifactKeys.ARTIFACTID, artifactId,
"\\.|-" );
- }
-
- if ( version != null && version.length() > 0 )
+ SearchResults results = new SearchResults();
+ List<String> fieldsList = new ArrayList<String>();
+ List<String> termsList = new ArrayList<String>();
+ List<BooleanClause.Occur> flagsList = new
ArrayList<BooleanClause.Occur>();
+
+ if( groupId != null && !"".equals( groupId.trim() ) )
+ {
+ fieldsList.add( ArtifactKeys.GROUPID );
+ termsList.add( groupId );
+ flagsList.add( BooleanClause.Occur.MUST );
+ }
+
+ if( artifactId != null && !"".equals( artifactId.trim() ) )
+ {
+ fieldsList.add( ArtifactKeys.ARTIFACTID );
+ termsList.add( artifactId );
+ flagsList.add( BooleanClause.Occur.MUST );
+ }
+
+ if( version != null && !"".equals( version.trim() ) )
+ {
+ fieldsList.add( ArtifactKeys.VERSION );
+ termsList.add( version );
+ flagsList.add( BooleanClause.Occur.MUST );
+ }
+
+ if( className != null && !"".equals( className.trim() ) )
+ {
+ fieldsList.add( BytecodeKeys.CLASSES );
+ fieldsList.add( BytecodeKeys.FILES );
+ fieldsList.add( BytecodeKeys.METHODS );
+ termsList.add( className.trim() );
+ termsList.add( className.trim() );
+ termsList.add( className.trim() );
+ flagsList.add( BooleanClause.Occur.SHOULD );
+ flagsList.add( BooleanClause.Occur.SHOULD );
+ flagsList.add( BooleanClause.Occur.SHOULD );
+ }
+
+ try
{
- parseAndAdd( booleanQuery, ArtifactKeys.VERSION, version, "\\.|-"
);
+ String[] fieldsArr = new String[ fieldsList.size() ];
+ String[] queryArr = new String[ termsList.size() ];
+ BooleanClause.Occur[] flagsArr = new BooleanClause.Occur[
flagsList.size() ];
+
+ Query fieldsQuery =
+ MultiFieldQueryParser.parse( termsList.toArray( queryArr ),
fieldsList.toArray( fieldsArr ),
+ flagsList.toArray( flagsArr ),
new BytecodeHandlers().getAnalyzer() );
+
+ LuceneQuery query = new LuceneQuery( fieldsQuery );
+ results = searchAll( query, limits, indexes, null );
+ results.getRepositories().add( this.localIndexedRepositories );
}
-
- if ( className != null && className.length() > 0 )
+ catch ( ParseException e )
{
-
- try
- {
- QueryParser parser =
- new MultiFieldQueryParser( new String[] {
BytecodeKeys.CLASSES, BytecodeKeys.FILES,
- BytecodeKeys.METHODS }, new
BytecodeHandlers().getAnalyzer() );
- booleanQuery.add( parser.parse( className ),
BooleanClause.Occur.MUST );
- }
- catch ( ParseException e )
- {
-
- }
- }
-
- LuceneQuery query = new LuceneQuery( booleanQuery );
- results = searchAll( query, limits, indexes, null );
- results.getRepositories().add( this.localIndexedRepositories );
+ log.warn( "Unable to parse advanced search fields and query
terms." );
+ }
return results;
}
@@ -263,8 +283,8 @@
hits = searcher.search( specificQuery );
}
- int hitCount = hits.length();
-
+ int hitCount = hits.length();
+
// Now process the limits.
results.setLimits( limits );
results.setTotalHits( hitCount );
@@ -453,26 +473,6 @@
}
}
- private void parseAndAdd( BooleanQuery query, String key, String value,
String delimiter )
- {
- if ( value != null && value.length() > 0 )
- {
- String[] terms = value.split( delimiter );
- for ( int i = 0; i < terms.length; i++ )
- {
- Term valueTerm = new Term( key, terms[i] );
- Query valueQuery = new TermQuery( valueTerm );
- query.add( valueQuery, BooleanClause.Occur.MUST );
- }
- }
- else
- {
- Term valueTerm = new Term( key, value );
- Query valueQuery = new TermQuery( valueTerm );
- query.add( valueQuery, BooleanClause.Occur.MUST );
- }
- }
-
public void initialize()
throws InitializationException
{
Added:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt?rev=707291&view=auto
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt
(added)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt
Wed Oct 22 23:31:39 2008
@@ -0,0 +1,7 @@
+FILENAME|a-common5-1.0.jar
+SIZE|8516
+HASH_MD5|a5d0d280ce83133432d8fed8f2ce3474
+HASH_SHA1|c2635a1b38bd4520a6604664c04b2b3c32330864
+HASH_BYTECODE|2868f6661c55afda5a3b62859fbc8b1beb021b6e
+JDK|1.4
+CLASS|a.common5.package.ACommonTestFile
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java?rev=707291&r1=707290&r2=707291&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
Wed Oct 22 23:31:39 2008
@@ -75,6 +75,9 @@
// wagon-provider-api-1.0-beta-3-20070209.213958-2.jar.txt
dumps.put( "wagon-provider-api", createArchivaArtifact(
"org.apache.maven.wagon", "wagon-provider-api",
"1.0-beta-3-20070209.213958-2", "", "jar" ) );
+
+ // a-common5
+ dumps.put( "a-common5", createArchivaArtifact( "a", "a-common5",
"1.0", "", "jar" ) );
return dumps;
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java?rev=707291&r1=707290&r2=707291&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
Wed Oct 22 23:31:39 2008
@@ -267,6 +267,32 @@
"archiva-common", "1.0", null, 30 );
}
+ // MRM-981 - artifactIds with numeric characters aren't found in advanced
search
+ public void testFilteredSearchArtifactIdHasNumericChar()
+ throws Exception
+ {
+ CrossRepositorySearch search = lookupCrossRepositorySearch();
+
+ String expectedRepos[] = new String[] { TEST_DEFAULT_REPO_ID };
+
+ String expectedResults[] = new String[] { "a-common5" };
+
+ assertFilteredSearchResults( expectedRepos, expectedResults, search,
null, "a-common5", null, null, 30 );
+
+ assertFilteredSearchResults( expectedRepos, expectedResults, search,
"a", "a-common5", null, null, 30 );
+
+ assertFilteredSearchResults( expectedRepos, expectedResults, search,
"a", "a-common5", "1.0", null, 30 );
+
+ assertFilteredSearchResults( expectedRepos, expectedResults, search,
"a", "a-common5", "1.0", "ACommonTestFile", 30 );
+
+ assertFilteredSearchResults( expectedRepos, expectedResults, search,
"a", "a-common5", "1.0", "a.common5.package.", 30 );
+
+ String noHitsExpectedResults[] = new String[] {};
+
+ assertFilteredSearchResults( expectedRepos, noHitsExpectedResults,
search, "org.apache.maven.archiva",
+ "a-common5", null, null, 30 );
+ }
+
private void assertFilteredSearchResults ( String expectedRepos[], String
expectedResults[], CrossRepositorySearch search,
String groupId, String
artifactId, String version, String className , int rowCount )
{