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 idsAs 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.