@Component(role=Indexer.class) public class DefaultIndexer extends org.codehaus.plexus.logging.AbstractLogEnabled implements Indexer
Indexer implementation.| Modifier and Type | Field and Description |
|---|---|
private static char[] |
DIGITS |
private IndexerEngine |
indexerEngine |
private QueryCreator |
queryCreator |
private SearchEngine |
searcher |
| Constructor and Description |
|---|
DefaultIndexer() |
| Modifier and Type | Method and Description |
|---|---|
void |
addArtifactsToIndex(java.util.Collection<ArtifactContext> ac,
IndexingContext context)
Adds the passed in artifact contexts to passed in indexing context.
|
void |
closeIndexingContext(IndexingContext context,
boolean deleteFiles)
Closes the indexing context: closes it and deletes (if specified) the index files.
|
org.apache.lucene.search.Query |
constructQuery(Field field,
SearchExpression expression)
Helper method to construct Lucene query for given field without need for knowledge (on caller side) HOW is a
field indexed, and WHAT query is needed to achieve that search.
|
IndexingContext |
createIndexingContext(java.lang.String id,
java.lang.String repositoryId,
java.io.File repository,
java.io.File indexDirectory,
java.lang.String repositoryUrl,
java.lang.String indexUpdateUrl,
boolean searchable,
boolean reclaim,
java.util.List<? extends IndexCreator> indexers)
Creates an indexing context.
|
IndexingContext |
createMergedIndexingContext(java.lang.String id,
java.lang.String repositoryId,
java.io.File repository,
java.io.File indexDirectory,
boolean searchable,
ContextMemberProvider membersProvider)
Creates a merged indexing context.
|
void |
deleteArtifactsFromIndex(java.util.Collection<ArtifactContext> ac,
IndexingContext context)
Removes the passed in artifacts contexts from passed in indexing context.
|
private static java.lang.String |
encode(byte[] digest) |
java.util.Collection<ArtifactInfo> |
identify(java.io.File artifact,
java.util.Collection<IndexingContext> contexts)
Performs an "identity" search.
|
java.util.Collection<ArtifactInfo> |
identify(org.apache.lucene.search.Query query,
java.util.Collection<IndexingContext> contexts)
Performs an "identity" search.
|
FlatSearchResponse |
searchFlat(FlatSearchRequest request)
Searches according the request parameters.
|
GroupedSearchResponse |
searchGrouped(GroupedSearchRequest request)
Searches according the request parameters.
|
IteratorSearchResponse |
searchIterator(IteratorSearchRequest request)
Searches according to request parameters.
|
@Requirement private SearchEngine searcher
@Requirement private IndexerEngine indexerEngine
@Requirement private QueryCreator queryCreator
private static final char[] DIGITS
public IndexingContext createIndexingContext(java.lang.String id, java.lang.String repositoryId, java.io.File repository, java.io.File indexDirectory, java.lang.String repositoryUrl, java.lang.String indexUpdateUrl, boolean searchable, boolean reclaim, java.util.List<? extends IndexCreator> indexers) throws java.io.IOException, ExistingLuceneIndexMismatchException, java.lang.IllegalArgumentException
IndexercreateIndexingContext in interface Indexerid - the ID of the context.repositoryId - the ID of the repository that this context represents. You might have several contexts
indexing same repository ID, but on separate locations.repository - the location of the repository on FS.indexDirectory - the location of the Lucene indexes on FS.repositoryUrl - the location of the remote repository or null if this indexing context does not need
remote updates (is not a proxy).indexUpdateUrl - the alternate location of the remote repository indexes (if they are not in default place)
or null if defaults are applicable.searchable - if context should be searched in non-targeted mode.reclaim - if indexDirectory is known to contain (or should contain) valid Maven Indexer lucene index, and no
checks needed to be performed, or, if we want to "stomp" over existing index (unsafe to do!).indexers - the set of indexers to apply to this context.java.io.IOException - in case of some serious IO problem.ExistingLuceneIndexMismatchException - if a Lucene index already exists where location is specified, but
it has no Nexus descriptor record or it has, but the embedded repoId differs from the repoId
specified from the supplied one. Never thrown if reclaim is true, as in that case, if
Lucene index exists but any of those criteria above are not met, the existing index is overwritten,
and equipped with proper descriptor silently.java.lang.IllegalArgumentException - in case the supplied list of IndexCreators are having non-satisfiable
dependencies.public IndexingContext createMergedIndexingContext(java.lang.String id, java.lang.String repositoryId, java.io.File repository, java.io.File indexDirectory, boolean searchable, ContextMemberProvider membersProvider) throws java.io.IOException
IndexercreateMergedIndexingContext in interface Indexerid - the ID of the context.repositoryId - the ID of the repository that this context represents. You might have several contexts
indexing same repository ID, but on separate locations.repository - the location of the repository on FS.indexDirectory - the location of the Lucene indexes on FS.searchable - if context should be searched in non-targeted mode.membersProvider - the ContextMemberProvider, never null.java.io.IOException - in case of some serious IO problem.public void closeIndexingContext(IndexingContext context, boolean deleteFiles) throws java.io.IOException
IndexercloseIndexingContext in interface Indexercontext - the one needed to be closed, never null.deleteFiles - true if all indexer related files (including Lucene index!) needs to be deleted,
false otherwise.java.io.IOExceptionpublic void addArtifactsToIndex(java.util.Collection<ArtifactContext> ac, IndexingContext context) throws java.io.IOException
IndexeraddArtifactsToIndex in interface Indexerjava.io.IOExceptionpublic void deleteArtifactsFromIndex(java.util.Collection<ArtifactContext> ac, IndexingContext context) throws java.io.IOException
IndexerdeleteArtifactsFromIndex in interface Indexerjava.io.IOExceptionpublic FlatSearchResponse searchFlat(FlatSearchRequest request) throws java.io.IOException
IndexersearchFlat in interface Indexerjava.io.IOExceptionpublic IteratorSearchResponse searchIterator(IteratorSearchRequest request) throws java.io.IOException
IndexersearchIterator in interface Indexerjava.io.IOExceptionpublic GroupedSearchResponse searchGrouped(GroupedSearchRequest request) throws java.io.IOException
IndexersearchGrouped in interface Indexerjava.io.IOExceptionpublic java.util.Collection<ArtifactInfo> identify(java.io.File artifact, java.util.Collection<IndexingContext> contexts) throws java.io.IOException
IndexerFile will have SHA1 hash calculated, and an
Indexer.identify(Query, Collection) method will be invoked searching with calculated hash the MAVEN.SHA1
field. This is just a shorthand method, as these calls are simply calculating hex encoded SHA1 of the file, and
invoking the Indexer.constructQuery(Field, SearchExpression) and Indexer.identify(Query, Collection) methods.public java.util.Collection<ArtifactInfo> identify(org.apache.lucene.search.Query query, java.util.Collection<IndexingContext> contexts) throws java.io.IOException
IndexerMAVEN.SHA1 or such.public org.apache.lucene.search.Query constructQuery(Field field, SearchExpression expression) throws java.lang.IllegalArgumentException
IndexerconstructQuery in interface Indexerjava.lang.IllegalArgumentExceptionSearchExpression,
UserInputSearchExpression,
SourcedSearchExpressionprivate static java.lang.String encode(byte[] digest)