Grails / GORM withCriteria serach toString()

时间:2014-10-03 09:55:31

标签: java hibernate grails filter gorm

我正在显示一个包含User个对象的表格。显示的信息是:

User.firstName
User.lastName
User.email

但是使用user.toString()显示,结果如下:

Gordon, Tomas (gordon.tomas@company.com)
Hanks, Jessica (hanks.jessica@company.com)

我想在此列表中设置一个过滤器,以便人们搜索特定用户。这些是要求:

1) 1 search field only
2) generic text input

目前我执行以下操作来更新列表,而owner是输入:

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时,这非常有效。

我期待的是人们会像这样搜索:

  • '汤姆
  • 'gordon tomas'
  • 'jessica @ company hanks'
  • 'tomas gordon'
  • ......等等

我眼中最好的解决方案是直接在toString()搜索,但我还没想出怎么做..

有关如何正确过滤的任何想法?

1 个答案:

答案 0 :(得分:1)

基本上你有两个选择:快速做或做得对。

快速)向您的域类添加一个字段,以包含您要搜索的字段值的串联,例如User.concatenated = 'Gordon Tomas gordon.tomas@company.com'。然后你就可以解雇你的搜索:

def potentialUsers = User.withCriteria {
  user.split( /\s+/ ).each{  
    ilike 'concatenated', '%' + it + '%'
  }
}

正确)使用Lucene或基于Lucene的正确全文搜索框架,例如hibernate-searchgrails search pluginelastic search来索引字段,所以你可以触发复杂的多字查询