Grails / GORM withCriteria search toString()

问题描述 投票:0回答:1

我正在显示带有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

当前,我正在执行以下操作以更新列表,输入[w0]是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时,效果很好。

但是我期望人们会这样搜索:

  • 'tom'
  • 'gordon tomas'
  • 'jessica @ company hanks'
  • 'tomas gordon'
  • ...依此类推

在我看来,最好的解决方法是直接在toString()中搜索,但我还不知道该怎么做。。

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

java hibernate grails filter gorm
1个回答
1
投票

基本上,这里有2个选项:快速执行或正确执行。

快速]将一个字段添加到您的域类中,以包含要搜索的字段值的串联,例如User.concatenated = 'Gordon Tomas [email protected]'。那么您可以像这样触发搜索:

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

右)使用Lucene或基于Lucene的适当全文本搜索框架,例如hibernate-searchgrails search pluginelastic search来索引字段,因此可以触发复杂的多字查询] >

© www.soinside.com 2019 - 2024. All rights reserved.