Class DefaultIssueIndexer
- All Implemented Interfaces:
BackupContributor,IssueIndexer,UnmanagedIndexSearcherProvider
IssueIndexer for Lucene
Platform-specific class intended for the Lucene search platform only.
Jira Search exposes a common API backed by multiple search engines. This class bypasses that abstraction and couples callers to Lucene internals.
Using this class when the runtime search platform is not Lucene (e.g. OpenSearch) may produce incorrect results or failures.
For platform-agnostic usage, use OpenSearchIssueIndexer which works across
all supported search platforms.
Internal use only.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfacestatic interfaceclassstatic interfaceDefaultIssueIndexer.EntityRetriever<T extends WithId>static interfaceNested classes/interfaces inherited from interface com.atlassian.jira.issue.index.IssueIndexer
IssueIndexer.Analyzers -
Constructor Summary
ConstructorsConstructorDescriptionDefaultIssueIndexer(IndexDirectoryFactory indexDirectoryFactory, DefaultIssueIndexer.CommentRetriever commentRetriever, DefaultIssueIndexer.ChangeHistoryRetriever changeHistoryRetriever, DefaultIssueIndexer.WorklogRetriever worklogRetriever, ApplicationProperties applicationProperties, IssueDocumentFactory issueDocumentFactory, CommentDocumentFactory commentDocumentFactory, ChangeHistoryDocumentFactory changeHistoryDocumentFactory, WorklogDocumentFactory worklogDocumentFactory, IssueManager issueManager, IndexBackupContributionStrategy backupPreparationStrategy, IndexBackupContributorsManager indexBackupContributorsManager, DBRSender dbrSender, EntityVersioningManager entityVersioningManager, ReplicatedIndexManager replicatedIndexManager, IndexingFeatures indexingFeatures, IndexingLimitsStats indexingLimitsStats, com.atlassian.event.api.EventPublisher eventPublisher, DocumentMapper documentMapper) -
Method Summary
Modifier and TypeMethodDescriptionconditionalUpdateWithVersion(IndexDirectoryFactory.Name indexName, org.apache.lucene.document.Document document) Index aDocumentconditionally based on the entity id and the version which are resolved byIndexDirectoryFactory.Name.getEntityIdFromDocument(Document)andIndexDirectoryFactory.Name.getEntityVersionFromDocument(Document)conditionalUpdateWithVersion(org.apache.lucene.document.Document issueDocument, Collection<org.apache.lucene.document.Document> commentDocuments, Collection<org.apache.lucene.document.Document> changeHistoryDocuments, Collection<org.apache.lucene.document.Document> worklogDocuments) Index an issue document with its related documents conditionally based on the entity ids and the versions which are resolved byIndexDirectoryFactory.Name.getEntityIdFromDocument(Document)andIndexDirectoryFactory.Name.getEntityVersionFromDocument(Document)voidcontributeToBackup(BackupBuilder backupBuilder) Contribute a set of files to the givenbackupBuilderto include them in the backup being created when this method was called.deindexComments(Collection<? extends WithId> comments, Context context, boolean shouldReplicate) deindexIssues(Collection<? extends WithId> issues, Context context) Delete any existing documents (in the issue index invalid input: '&' all related entity indexes) for the Issues represented by the supplied WithIdsdeindexIssues(Collection<? extends WithId> issues, Context context, boolean shouldReplicate) Delete any existing documents (in the issue index invalid input: '&' all related entity indexes) for the Issues represented by the supplied WithIdsdeIndexProject(Project project, boolean shouldReplicate) Remove all documents connected with given projectdeindexWorklogs(Collection<? extends WithId> worklogs, Context context, boolean shouldReplicate) voidDelete all indexes.voiddeleteIndexes(IssueIndexingParams issueIndexingParams) Delete selected indexes.intGets number of indexing threads.indexDocument(IndexRequest indexRequest) Index a document using the provided IndexRequest.indexIssues(EnclosedIterable<Issue> issues, Context context, IssueIndexingParams issueIndexingParams) Add documents for the supplied issues.indexIssuesBatchMode(IssuesBatcher batcher, Context context, IssueIndexingParams issueIndexingParams) No other index operations should be called while this method is being calledIssue searcher has to be closed after doing stuff.optimize()reindexComments(Collection<Comment> comments, Context context, boolean shouldReplicate) Reindex a collection of issue comments.reindexCommentsInParallel(Collection<Comment> comments, Context context) Reindex a collection of issue comments on multiple threads.reindexIssues(EnclosedIterable<Issue> issues, Context context, IssueIndexingParams issueIndexingParams, boolean conditionalUpdate, boolean shouldReplicate) Re-index the given issues, delete any existing documents and add new ones.reindexIssuesBatchMode(IssuesBatcher batcher, Context context, IssueIndexingParams issueIndexingParams) No other index operations should be called while this method is being calledreindexWorklogs(Collection<Worklog> worklogs, Context context, boolean shouldReplicate) reindexWorklogsInParallel(Collection<Worklog> worklogs, Context context) Reindex a collection of issue worklogs on multiple threads.voidshutdown()Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.atlassian.jira.issue.index.IssueIndexer
deindexComments, deindexWorklogs, reindexComments, reindexWorklogs
-
Constructor Details
-
DefaultIssueIndexer
public DefaultIssueIndexer(@Nonnull IndexDirectoryFactory indexDirectoryFactory, @Nonnull DefaultIssueIndexer.CommentRetriever commentRetriever, @Nonnull DefaultIssueIndexer.ChangeHistoryRetriever changeHistoryRetriever, @Nonnull DefaultIssueIndexer.WorklogRetriever worklogRetriever, @Nonnull ApplicationProperties applicationProperties, @Nonnull IssueDocumentFactory issueDocumentFactory, @Nonnull CommentDocumentFactory commentDocumentFactory, @Nonnull ChangeHistoryDocumentFactory changeHistoryDocumentFactory, @Nonnull WorklogDocumentFactory worklogDocumentFactory, @Nonnull IssueManager issueManager, @Nonnull IndexBackupContributionStrategy backupPreparationStrategy, @Nullable IndexBackupContributorsManager indexBackupContributorsManager, @Nonnull DBRSender dbrSender, @Nonnull EntityVersioningManager entityVersioningManager, @Nonnull ReplicatedIndexManager replicatedIndexManager, @Nonnull IndexingFeatures indexingFeatures, @Nonnull IndexingLimitsStats indexingLimitsStats, @Nonnull com.atlassian.event.api.EventPublisher eventPublisher, @Nonnull DocumentMapper documentMapper)
-
-
Method Details
-
getNumberOfIndexingThreads
public int getNumberOfIndexingThreads()Description copied from interface:IssueIndexerGets number of indexing threads.Configured by 'jira.index.issue.threads'.
- Specified by:
getNumberOfIndexingThreadsin interfaceIssueIndexer- Returns:
- the number of indexing threads.
-
deindexIssues
public Index.Result deindexIssues(@Nonnull Collection<? extends WithId> issues, @Nonnull Context context) Description copied from interface:IssueIndexerDelete any existing documents (in the issue index invalid input: '&' all related entity indexes) for the Issues represented by the supplied WithIds- Specified by:
deindexIssuesin interfaceIssueIndexer- Parameters:
issues- An iterable of WithIds for the Issues to de-index.context- for showing the user the current status.
-
deindexIssues
public Index.Result deindexIssues(@Nonnull Collection<? extends WithId> issues, @Nonnull Context context, boolean shouldReplicate) Description copied from interface:IssueIndexerDelete any existing documents (in the issue index invalid input: '&' all related entity indexes) for the Issues represented by the supplied WithIds- Specified by:
deindexIssuesin interfaceIssueIndexer- Parameters:
issues- An iterable of WithIds for the Issues to de-index.context- for showing the user the current status.shouldReplicate- whether the index changes should be replicated to the other nodes in the cluster.
-
deIndexProject
Description copied from interface:IssueIndexerRemove all documents connected with given project- Specified by:
deIndexProjectin interfaceIssueIndexer- Parameters:
project- project objectshouldReplicate-
-
indexIssues
public Index.Result indexIssues(@Nonnull EnclosedIterable<Issue> issues, @Nonnull Context context, @Nonnull IssueIndexingParams issueIndexingParams) Description copied from interface:IssueIndexerAdd documents for the supplied issues.- Specified by:
indexIssuesin interfaceIssueIndexer- Parameters:
issues- An iterable of issues to index.context- for showing the user the current status.issueIndexingParams- parameters describing what should be reindexed
-
indexIssuesBatchMode
public AccumulatingResultBuilder indexIssuesBatchMode(@Nonnull IssuesBatcher batcher, @Nonnull Context context, @Nonnull IssueIndexingParams issueIndexingParams) No other index operations should be called while this method is being called- Specified by:
indexIssuesBatchModein interfaceIssueIndexer- Parameters:
batcher- An iterable over issue batches.context- for showing the user the current status.issueIndexingParams- parameters describing what should be reindexed
-
reindexIssuesBatchMode
public AccumulatingResultBuilder reindexIssuesBatchMode(@Nonnull IssuesBatcher batcher, @Nonnull Context context, @Nonnull IssueIndexingParams issueIndexingParams) No other index operations should be called while this method is being called- Specified by:
reindexIssuesBatchModein interfaceIssueIndexer- Parameters:
batcher- an iterable over issue batches.context- for showing the user the current status.issueIndexingParams- parameters describing what should be reindexed
-
reindexIssues
public Index.Result reindexIssues(@Nonnull EnclosedIterable<Issue> issues, @Nonnull Context context, @Nonnull IssueIndexingParams issueIndexingParams, boolean conditionalUpdate, boolean shouldReplicate) Description copied from interface:IssueIndexerRe-index the given issues, delete any existing documents and add new ones.- Specified by:
reindexIssuesin interfaceIssueIndexer- Parameters:
issues- An iterable of issues to index.context- for showing the user the current status.issueIndexingParams- parameters describing what should be reindexedconditionalUpdate- set to true to use conditional updates when writing to the indexshouldReplicate- whether or not the index changes should be replicated to the other nodes in the cluster.
-
reindexComments
public Index.Result reindexComments(@Nonnull Collection<Comment> comments, @Nonnull Context context, boolean shouldReplicate) Description copied from interface:IssueIndexerReindex a collection of issue comments.- Specified by:
reindexCommentsin interfaceIssueIndexer- Parameters:
comments- Comments to be reindexed.context- for showing the user the current status.shouldReplicate- whether or not the index changes should be replicated to the other nodes in the cluster.
-
reindexCommentsInParallel
public Index.Result reindexCommentsInParallel(@Nonnull Collection<Comment> comments, @Nonnull Context context) Description copied from interface:IssueIndexerReindex a collection of issue comments on multiple threads. This will not replicate the comments to the other nodes in cluster. As this method does not use conditional updates, it must be executed under index write lock.- Specified by:
reindexCommentsInParallelin interfaceIssueIndexer- Parameters:
comments- Comments to be reindexed.context- for showing the user the current status.
-
reindexWorklogsInParallel
public Index.Result reindexWorklogsInParallel(@Nonnull Collection<Worklog> worklogs, @Nonnull Context context) Description copied from interface:IssueIndexerReindex a collection of issue worklogs on multiple threads. This will not replicate the worklogs to the other nodes in cluster. As this method does not use conditional updates, it must be executed under index write lock.- Specified by:
reindexWorklogsInParallelin interfaceIssueIndexer- Parameters:
worklogs- Worklogs to be reindexed.context- for showing the user the current status.
-
reindexWorklogs
public Index.Result reindexWorklogs(@Nonnull Collection<Worklog> worklogs, @Nonnull Context context, boolean shouldReplicate) - Specified by:
reindexWorklogsin interfaceIssueIndexer
-
deindexComments
public Index.Result deindexComments(@Nonnull Collection<? extends WithId> comments, @Nonnull Context context, boolean shouldReplicate) - Specified by:
deindexCommentsin interfaceIssueIndexer
-
deindexWorklogs
public Index.Result deindexWorklogs(@Nonnull Collection<? extends WithId> worklogs, @Nonnull Context context, boolean shouldReplicate) - Specified by:
deindexWorklogsin interfaceIssueIndexer
-
conditionalUpdateWithVersion
public Index.Result conditionalUpdateWithVersion(IndexDirectoryFactory.Name indexName, org.apache.lucene.document.Document document) Description copied from interface:IssueIndexerIndex aDocumentconditionally based on the entity id and the version which are resolved byIndexDirectoryFactory.Name.getEntityIdFromDocument(Document)andIndexDirectoryFactory.Name.getEntityVersionFromDocument(Document)- Specified by:
conditionalUpdateWithVersionin interfaceIssueIndexer- Parameters:
indexName- define the target indexdocument- the document needs to be indexed
-
conditionalUpdateWithVersion
public Index.Result conditionalUpdateWithVersion(org.apache.lucene.document.Document issueDocument, Collection<org.apache.lucene.document.Document> commentDocuments, Collection<org.apache.lucene.document.Document> changeHistoryDocuments, Collection<org.apache.lucene.document.Document> worklogDocuments) Description copied from interface:IssueIndexerIndex an issue document with its related documents conditionally based on the entity ids and the versions which are resolved byIndexDirectoryFactory.Name.getEntityIdFromDocument(Document)andIndexDirectoryFactory.Name.getEntityVersionFromDocument(Document)- Specified by:
conditionalUpdateWithVersionin interfaceIssueIndexer- Parameters:
issueDocument- issue document needs to be indexedcommentDocuments- issue's comment documentschangeHistoryDocuments- issue's history change documentsworklogDocuments- issue's worklog documents
-
indexDocument
Description copied from interface:IssueIndexerIndex a document using the provided IndexRequest.WARNING: This method bypasses the standard JIRA versioning flow and should be used with extreme caution. It does not automatically manage entity versions through the EntityVersioningManager, which can lead to version conflicts and inconsistent index state if the same entity is updated through normal JIRA operations.
Recommended Usage: This method should only be used in controlled scenarios where:
- The caller explicitly manages document versioning
- Testing or development scenarios where version conflicts are acceptable
- Specified by:
indexDocumentin interfaceIssueIndexer- Parameters:
indexRequest- the request containing the document ID, optional version, document type, and field values to be indexed. Must not be null.- Returns:
- the result of the indexing operation
-
deleteIndexes
public void deleteIndexes()Description copied from interface:IssueIndexerDelete all indexes.- Specified by:
deleteIndexesin interfaceIssueIndexer
-
deleteIndexes
Description copied from interface:IssueIndexerDelete selected indexes.- Specified by:
deleteIndexesin interfaceIssueIndexer- Parameters:
issueIndexingParams- parameters describing which indexes should be deleted.
-
openEntitySearcher
Description copied from interface:UnmanagedIndexSearcherProviderIssue searcher has to be closed after doing stuff. Note: when doing this you need to have the index read lock, as this may trigger creating index when not there; SeeIndexManagerBase.indexLock. SeeIndexManagerBase.getEntitySearcher(IndexDirectoryFactory.Name)()}.- Specified by:
openEntitySearcherin interfaceUnmanagedIndexSearcherProvider
-
optimize
- Specified by:
optimizein interfaceIssueIndexer
-
shutdown
public void shutdown()- Specified by:
shutdownin interfaceIssueIndexer
-
getIndexPaths
- Specified by:
getIndexPathsin interfaceIssueIndexer
-
getIndexRootPath
- Specified by:
getIndexRootPathin interfaceIssueIndexer
-
contributeToBackup
Description copied from interface:BackupContributorContribute a set of files to the givenbackupBuilderto include them in the backup being created when this method was called.- Specified by:
contributeToBackupin interfaceBackupContributor- Parameters:
backupBuilder- builder of the backup being created at the time of call. All existing and nonempty files passed to its accept method will be included. The builder may not be reusable and the reference should not be stored outside the scope of this method
-