我正在创建一个搜索功能以浏览我的一个域类。
我有一个字符串,我想将其拆分为单个单词,以便可以在域类中搜索每个单词。
例如,我的User类具有名称属性和传记属性。
如果我在系统中搜索了“Tom Chicago” ,它将返回所有用户,例如%tom%或%chicago%等名称,以及所有带有包含这些单词的传记的用户至。
我已经开始了这样的搜索功能:
def userCriteria = User.createCriteria()
userResults = userCriteria.list(){
like("name", "%${q}%")
like("biography", "%${q}%")
}
显然,这并没有完全满足我的要求。我该如何调整使其适应?
最佳答案
当这将创建一些可怕的SQL语句时,它将执行您想要的操作。当存在诸如Searchable之类的东西时,不能确定我是否可以真诚地在生产系统中使用它。
def userCriteria = User.createCriteria()
def userResults = userCriteria.list() {
or {
q.split(" ").each { t ->
ilike("name", "%$t%")
ilike("biography", "%$t%")
}
}
}
关于search - 使用Grails和Groovy分割字符串并为每个单词搜索一个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133606/