@PublicSpi public interface

FieldIndexer

com.atlassian.jira.issue.index.indexers.FieldIndexer
Known Indirect Subclasses

@PublicSpi

This interface is designed for plugins to implement.

Clients of @PublicSpi can expect that programs compiled against a given version will remain binary compatible with later versions of the @PublicSpi as per each product's API policy (clients should refer to each product's API policy for the exact guarantee -- usually binary compatibility is guaranteed at least across minor versions).

Note: @PublicSpi interfaces and classes are specifically designed to be implemented/extended by clients. Hence, the guarantee of binary compatibility is different to that of @PublicApi elements (if an element is both @PublicApi and @PublicSpi, both guarantees apply).

Class Overview

This is meant to create a portion of a org.apache.lucene.document.Document that is relevant for a JIRA field.

The portion that is added to the Document will be the indexed value that is represented by the value contained in the Issue object when the addIndex(org.apache.lucene.document.Document, com.atlassian.jira.issue.Issue) method is called.

There is a strong relationship between a FieldIndexer and a ClauseQueryFactory as the indexer creates a portion of the lucene Document and the query factory assumes it knows what this looks like and can generate a Lucene query that will find relevant issues based on the values that were indexed.

If you are writting a CustomFieldSearcher then the glue that binds the FieldIndexer and the ClauseQueryFactory together is the CustomFieldSearcher since it provides both the ClauseHandler and the FieldIndexer. Keep in mind that if you are creating one of these that the Indexer must add fields to the document that the ClauseQueryFactory knows how to search.

Summary

Constants
String LABELS_NO_VALUE_INDEX_VALUE Empty token specific to LabelsIndexer
String NO_VALUE_INDEX_VALUE General empty token
Public Methods
void addIndex(Document doc, Issue issue)
This method allows an indexer the opportunity to modifiy the provided Lucene document (by reference) such that it will contain fields that are relevant for searching and storage of the portion of the issue that the FieldIndexer handles.
String getDocumentFieldId()
String getId()
boolean isFieldVisibleAndInScope(Issue issue)
This method is used to determine if the indexer is relevant for the provided issue.

Constants

public static final String LABELS_NO_VALUE_INDEX_VALUE

Empty token specific to LabelsIndexer

Constant Value: ""

public static final String NO_VALUE_INDEX_VALUE

General empty token

Constant Value: "-1"

Public Methods

public void addIndex (Document doc, Issue issue)

This method allows an indexer the opportunity to modifiy the provided Lucene document (by reference) such that it will contain fields that are relevant for searching and storage of the portion of the issue that the FieldIndexer handles.

If calling isFieldVisibleAndInScope(com.atlassian.jira.issue.Issue) returns false then this method should create fields that have an Indexed type of NO. This allows us to store the value in the index but renderes its value unsearchable.

If, for example, the indexer handles indexing an issues summary then this indexer will add a field to the document that represents the stored and searchable summary of the issue.

Parameters
doc the lucene document that should be modified by adding relevant fields to.
issue the issue that contains the data that will be indexed and which can be used to determine the project/issue type context that will allow you to determine if we should add the value as searchable or unsearchable.

public String getDocumentFieldId ()

Returns

public String getId ()

Returns
  • the String representation of the field id that this indexer is indexing, this must be unique for each independant FieldIndexer. If the Indexer does not represent a System or Custom field in JIRA this should still return a unique string that describes the indexer.

public boolean isFieldVisibleAndInScope (Issue issue)

This method is used to determine if the indexer is relevant for the provided issue. This method must check the fields visibility, in relation to the field configuration scheme, must check any global flags that would enable or disable a field (such as enable votes flag), and must check, if the field is a custom field, if the custom field is relevant for this issue.

All these checks should take into account the IssueContext as defined by the passed in issue.

If this method returns false then the FieldIndexer, when performing addIndex, should make sure to make the indexed values have an Indexed type of NO.

The result of this method is used to determine the correct values that should be returned when performing an empty search.

Parameters
issue that is having a document created from.
Returns
  • if true then this field is relevant for the issue, otherwise it is not.