This can be achived via the ScriptRunner Console:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.search.SearchException
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.security.JiraAuthenticationContext
import com.atlassian.jira.bc.issue.search.SearchService.ParseResult
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.issue.index.IssueIndexingService
import com.atlassian.jira.util.ImportUtils
JiraAuthenticationContext authenticationContext = ComponentAccessor.getJiraAuthenticationContext()
def authContext = ComponentAccessor.getJiraAuthenticationContext()
def issueIndexingService = ComponentAccessor.getComponent(IssueIndexingService)
def issueManager = ComponentAccessor.getIssueManager()
String jql="project=TEST and status not in (Closed,Resolved)"
Number maxIndexCount = 600
SearchService searchService = ComponentAccessor.getComponentOfType(SearchService .class)
ParseResult parseResult = searchService.parseQuery(authenticationContext.getLoggedInUser(), jql)
int totalIssues = 0
if (parseResult.isValid())
{
SearchResults results = searchService.search(authenticationContext.getLoggedInUser(), parseResult.getQuery(), PagerFilter.getUnlimitedFilter())
final List issues = results?.results
//Loop all issues
issues.each { theIssue ->
if (totalIssues < maxIndexCount)
{
boolean wasIndexing = ImportUtils.isIndexIssues()
ImportUtils.setIndexIssues(true)
issueIndexingService.reIndex(issueManager.getIssueObject(theIssue.id))
ImportUtils.setIndexIssues(wasIndexing)
totalIssues= totalIssues +1
log.warn "Indexed: " + theIssue.getKey()
}
}
}