Has anyone written a custom cql script in scriptrunner that takees a phrase and then does an or search on each word? When searching via the confluence API is tries to match all words in the phrase, I'm looking for a way to return partial matches.
Thank you
Something like this should do just that:
import com.atlassian.confluence.pages.PageManager import com.atlassian.confluence.spaces.SpaceManager import com.atlassian.sal.api.component.ComponentLocator def spaceManager = ComponentLocator.getComponent(SpaceManager) def pageManager = ComponentLocator.getComponent(PageManager) String phrase = params[0] def words = phrase.tokenize() def ids = [] spaceManager.allSpaces.each{ space -> pageManager.getPages(space, true).each{ page -> boolean bodyOrTitleContains = words.any{ word -> page.bodyAsString.contains(word) || page.title.contains(word) } if (bodyOrTitleContains) { ids << String.valueOf(page.id) } } } return ids
As a side note, you could approximate that with functionality with the built-in CQL text field. You'd have to break up your phrase, but depending on your use case, that might be easier.
text ~ "word1" OR text ~ "word2" OR text ~ "word3"
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.