mirror of https://github.com/apache/archiva.git
[MRM-127] clean up query objects by removing Lucene specifics (refactoring will continue towards something simpler)
git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@425984 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f187c34612
commit
1c54e2df16
|
@ -17,9 +17,14 @@ package org.apache.maven.repository.indexing;
|
|||
*/
|
||||
|
||||
import org.apache.lucene.document.Document;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.queryParser.ParseException;
|
||||
import org.apache.lucene.queryParser.QueryParser;
|
||||
import org.apache.lucene.search.BooleanClause;
|
||||
import org.apache.lucene.search.BooleanQuery;
|
||||
import org.apache.lucene.search.Hits;
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.lucene.search.TermQuery;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||
|
@ -31,7 +36,11 @@ import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryM
|
|||
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||
import org.apache.maven.repository.indexing.query.CompoundQuery;
|
||||
import org.apache.maven.repository.indexing.query.CompoundQueryTerm;
|
||||
import org.apache.maven.repository.indexing.query.Query;
|
||||
import org.apache.maven.repository.indexing.query.RangeQuery;
|
||||
import org.apache.maven.repository.indexing.query.SingleTermQuery;
|
||||
import org.codehaus.plexus.logging.AbstractLogEnabled;
|
||||
import org.codehaus.plexus.util.IOUtil;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
|
@ -44,6 +53,7 @@ import java.net.MalformedURLException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
|
@ -68,7 +78,7 @@ public class DefaultRepositoryIndexSearcher
|
|||
org.apache.lucene.search.Query luceneQuery;
|
||||
try
|
||||
{
|
||||
luceneQuery = query.createLuceneQuery( index );
|
||||
luceneQuery = createLuceneQuery( query, index );
|
||||
}
|
||||
catch ( ParseException e )
|
||||
{
|
||||
|
@ -118,6 +128,61 @@ public class DefaultRepositoryIndexSearcher
|
|||
return docs;
|
||||
}
|
||||
|
||||
private org.apache.lucene.search.Query createLuceneQuery( Query query, RepositoryIndex index )
|
||||
throws ParseException
|
||||
{
|
||||
org.apache.lucene.search.Query luceneQuery = null;
|
||||
// TODO: hacked in temporarily
|
||||
if ( query instanceof CompoundQuery )
|
||||
{
|
||||
BooleanQuery booleanQuery = new BooleanQuery();
|
||||
List queries = ( (CompoundQuery) query ).getCompoundQueryTerms();
|
||||
for ( Iterator i = queries.iterator(); i.hasNext(); )
|
||||
{
|
||||
CompoundQueryTerm queryTerm = (CompoundQueryTerm) i.next();
|
||||
|
||||
booleanQuery.add( createLuceneQuery( queryTerm.getQuery(), index ), queryTerm.isRequired()
|
||||
? BooleanClause.Occur.MUST
|
||||
: queryTerm.isProhibited() ? BooleanClause.Occur.MUST_NOT : BooleanClause.Occur.SHOULD );
|
||||
}
|
||||
luceneQuery = booleanQuery;
|
||||
}
|
||||
else if ( query instanceof SingleTermQuery )
|
||||
{
|
||||
org.apache.lucene.search.Query qry;
|
||||
if ( index.isKeywordField( ( (SingleTermQuery) query ).getField() ) )
|
||||
{
|
||||
qry = new TermQuery(
|
||||
new Term( ( (SingleTermQuery) query ).getField(), ( (SingleTermQuery) query ).getValue() ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: doesn't seem like the right place for this here!
|
||||
QueryParser parser = new QueryParser( ( (SingleTermQuery) query ).getField(), index.getAnalyzer() );
|
||||
qry = parser.parse( ( (SingleTermQuery) query ).getValue() );
|
||||
}
|
||||
luceneQuery = qry;
|
||||
}
|
||||
else if ( query instanceof RangeQuery )
|
||||
{
|
||||
Term beginTerm = null;
|
||||
if ( ( (RangeQuery) query ).getBegin() != null )
|
||||
{
|
||||
beginTerm = new Term( ( (RangeQuery) query ).getBegin().getField(),
|
||||
( (RangeQuery) query ).getBegin().getValue() );
|
||||
}
|
||||
Term endTerm = null;
|
||||
if ( ( (RangeQuery) query ).getEnd() != null )
|
||||
{
|
||||
endTerm =
|
||||
new Term( ( (RangeQuery) query ).getEnd().getField(), ( (RangeQuery) query ).getEnd().getValue() );
|
||||
}
|
||||
luceneQuery =
|
||||
new org.apache.lucene.search.RangeQuery( beginTerm, endTerm, ( (RangeQuery) query ).isInclusive() );
|
||||
}
|
||||
return luceneQuery;
|
||||
}
|
||||
|
||||
private RepositoryIndexSearchHit createSearchedObjectFromIndexDocument( Document doc,
|
||||
ArtifactRepository repository )
|
||||
throws RepositoryIndexSearchException
|
||||
|
|
|
@ -16,13 +16,7 @@ package org.apache.maven.repository.indexing.query;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.lucene.queryParser.ParseException;
|
||||
import org.apache.lucene.search.BooleanClause;
|
||||
import org.apache.lucene.search.BooleanQuery;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndex;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -108,20 +102,4 @@ public class CompoundQuery
|
|||
return compoundQueryTerms;
|
||||
}
|
||||
|
||||
// TODO! relocate
|
||||
public org.apache.lucene.search.Query createLuceneQuery( RepositoryIndex index )
|
||||
throws ParseException
|
||||
{
|
||||
BooleanQuery booleanQuery = new BooleanQuery();
|
||||
List queries = this.compoundQueryTerms;
|
||||
for ( Iterator i = queries.iterator(); i.hasNext(); )
|
||||
{
|
||||
CompoundQueryTerm queryTerm = (CompoundQueryTerm) i.next();
|
||||
|
||||
booleanQuery.add( queryTerm.getQuery().createLuceneQuery( index ), queryTerm.isRequired()
|
||||
? BooleanClause.Occur.MUST
|
||||
: queryTerm.isProhibited() ? BooleanClause.Occur.MUST_NOT : BooleanClause.Occur.SHOULD );
|
||||
}
|
||||
return booleanQuery;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ package org.apache.maven.repository.indexing.query;
|
|||
*
|
||||
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
|
||||
*/
|
||||
class CompoundQueryTerm
|
||||
public class CompoundQueryTerm
|
||||
{
|
||||
/**
|
||||
* The query to add to the compound query.
|
||||
|
@ -57,7 +57,7 @@ class CompoundQueryTerm
|
|||
*
|
||||
* @return true if this Query is a search requirement, otherwise returns false
|
||||
*/
|
||||
boolean isRequired()
|
||||
public boolean isRequired()
|
||||
{
|
||||
return required;
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ class CompoundQueryTerm
|
|||
*
|
||||
* @return true if this Query is prohibited in the search result
|
||||
*/
|
||||
boolean isProhibited()
|
||||
public boolean isProhibited()
|
||||
{
|
||||
return prohibited;
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ class CompoundQueryTerm
|
|||
*
|
||||
* @return the query
|
||||
*/
|
||||
Query getQuery()
|
||||
public Query getQuery()
|
||||
{
|
||||
return query;
|
||||
}
|
||||
|
|
|
@ -16,9 +16,6 @@ package org.apache.maven.repository.indexing.query;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.lucene.queryParser.ParseException;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndex;
|
||||
|
||||
/**
|
||||
* Interface to label the query classes
|
||||
*
|
||||
|
@ -26,6 +23,4 @@ import org.apache.maven.repository.indexing.RepositoryIndex;
|
|||
*/
|
||||
public interface Query
|
||||
{
|
||||
org.apache.lucene.search.Query createLuceneQuery( RepositoryIndex index )
|
||||
throws ParseException;
|
||||
}
|
||||
|
|
|
@ -16,9 +16,6 @@ package org.apache.maven.repository.indexing.query;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndex;
|
||||
|
||||
/**
|
||||
* Query object that handles range queries (presently used for dates).
|
||||
*
|
||||
|
@ -150,21 +147,4 @@ public class RangeQuery
|
|||
return inclusive;
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo! this seems like the wrong place for this (it's back to front - create the query from the index
|
||||
*/
|
||||
public org.apache.lucene.search.Query createLuceneQuery( RepositoryIndex index )
|
||||
{
|
||||
Term beginTerm = null;
|
||||
if ( begin != null )
|
||||
{
|
||||
beginTerm = new Term( begin.getField(), begin.getValue() );
|
||||
}
|
||||
Term endTerm = null;
|
||||
if ( end != null )
|
||||
{
|
||||
endTerm = new Term( end.getField(), end.getValue() );
|
||||
}
|
||||
return new org.apache.lucene.search.RangeQuery( beginTerm, endTerm, inclusive );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,12 +16,6 @@ package org.apache.maven.repository.indexing.query;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.queryParser.ParseException;
|
||||
import org.apache.lucene.queryParser.QueryParser;
|
||||
import org.apache.lucene.search.TermQuery;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndex;
|
||||
|
||||
/**
|
||||
* Query for a single term.
|
||||
*
|
||||
|
@ -56,26 +50,6 @@ public class SingleTermQuery
|
|||
this.term = new QueryTerm( field, value );
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo! this seems like the wrong place for this (it's back to front - create the query from the index
|
||||
*/
|
||||
public org.apache.lucene.search.Query createLuceneQuery( RepositoryIndex index )
|
||||
throws ParseException
|
||||
{
|
||||
org.apache.lucene.search.Query qry;
|
||||
if ( index.isKeywordField( term.getField() ) )
|
||||
{
|
||||
qry = new TermQuery( new Term( term.getField(), term.getValue() ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: doesn't seem like the right place for this here!
|
||||
QueryParser parser = new QueryParser( term.getField(), index.getAnalyzer() );
|
||||
qry = parser.parse( term.getValue() );
|
||||
}
|
||||
return qry;
|
||||
}
|
||||
|
||||
public String getField()
|
||||
{
|
||||
return term.getField();
|
||||
|
|
Loading…
Reference in New Issue