My goal is to reindex issues whose the scripted field value have changed, in order to get accurate result on issue navigator.
Problem Statement: Due to an indexing problem, the result in issue navigator is inaccurate when i try searching like 'script_field_name ~ value'
Is there any recommended way to do that. I tried script listener. But it didn't work 100%.
Here is my existing script listener script which get triggered when issue update event is triggered.
import com.atlassian.jira.event.issue.AbstractIssueEventListener;
import com.atlassian.jira.event.issue.IssueEvent;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.util.ImportUtils;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.index.IssueIndexManager
import com.atlassian.jira.issue.index.IssueIndexingService;
//import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.search.SearchProvider;
import com.atlassian.jira.jql.parser.JqlQueryParser;
import com.atlassian.jira.web.bean.PagerFilter;
Issue issue = event.issue
if(issue.issueTypeObject.name == 'Epic')
{
//Get issue key
def currKey = issue.getKey();
//Query for all features where "Linked Epics" ~ current key
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser);
def searchProvider = ComponentAccessor.getComponent(SearchProvider);
def issueManager = ComponentAccessor.getIssueManager();
def user = ComponentAccessor.getJiraAuthenticationContext().getUser();
def queryString = 'issuetype = Feature AND "Linked Epics" ~ ' + currKey;
def query = jqlQueryParser.parseQuery(queryString);
def results = searchProvider.search(query, user, PagerFilter.getUnlimitedFilter());
log.warn("Reindex issue ${issue.key} ${issue.id} ${currKey} ${results.getIssues().size()}+++++++++++++++")
if (results)
{
results.getIssues().each { documentIssue ->
log.warn("Issue Key : ${documentIssue.key}");
boolean isIndex = ImportUtils.isIndexIssues();
ImportUtils.setIndexIssues(true);
IssueIndexingService IssueIndexingService = (IssueIndexingService) ComponentAccessor.getComponent(IssueIndexingService.class);
IssueIndexingService.reIndex(documentIssue);
ImportUtils.setIndexIssues(isIndex);
}
}
}