As we have seen in the JIRA architecture explained in Chapter 2, Understanding Plugin Framework, searching in JIRA is based on Apache Lucene. The Lucene indexes are stored in File System and are used as the basis for the search queries executed in JIRA. Whenever an issue is updated, more records are created, or existing records are updated for that particular issue in the filesystem.
It is possible to programmatically index selected or all issues, or de-index an issue. Also, we can switch OFF or ON indexing selectively in our plugins if needed. An example where re-indexing is needed is when a custom post function updates a field on the issue. De-indexing might be needed if you want to hide the issue from search results, for example, while archiving. In this recipe, we will see both of these.