我正在显示带有User
对象的表。显示的信息是:
User.firstName
User.lastName
User.email
但是使用会显示user.toString()
以下结果:
Gordon, Tomas ([email protected])
Hanks, Jessica ([email protected])
我希望在此列表上有一个过滤器,以允许人们搜索特定用户。这些是要求:
1) 1 search field only
2) generic text input
目前,我正在执行以下操作以更新列表,wherasowner
是输入:
def user // input as string from the search field
def potentialUsers = User.withCriteria {
or {
ilike("firstName", '%' + user + '%')
ilike("lastName", '%' + user + '%')
ilike("email", '%' + user + '%')
}
}
有only 1 word
输入时,此方法效果很好。
但是我期望人们会这样搜索:
在我看来,最好的解决方案是直接搜索,toString()
但我还不知道该怎么做。
关于如何正确过滤的任何想法?
基本上,您在这里有2个选择:快速执行或正确执行。
快速)将一个字段添加到您的域类中,以包含要搜索的字段值(例如)的串联User.concatenated = 'Gordon Tomas [email protected]'
。那么您可以像这样触发搜索:
def potentialUsers = User.withCriteria {
user.split( /\s+/ ).each{
ilike 'concatenated', '%' + it + '%'
}
}
正确)使用Lucene
或Lucene
基于的适当的全文本搜索框架(例如hibernate-search
或grails search plugin
或elastic search
为字段建立索引),因此您可以触发复杂的多字查询
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句