Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Is there any recommended way to re-index the scripted fields on frequent basis / whenever its change

nallu April 15, 2019

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);
}
}
}
 

 

0 answers

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events