gpt4 book ai didi

java - Grails/GORM withCriteria 搜索 toString()

转载 作者:行者123 更新时间:2023-12-01 12:28:07 25 4
gpt4 key购买 nike

我正在显示一个包含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 + '%')
}
}

当输入只有 1 个单词时,此方法非常有效。

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

  • “汤姆”
  • “戈登托马斯”
  • “jessica@company hanks”
  • “托马斯·戈登”
  • ...等等

在我看来,最好的解决方案是直接在 toString() 中搜索,但我还没有弄清楚如何做到这一点..

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

最佳答案

基本上,您有两个选择:快速执行或正确执行。

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

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

右)使用 Lucene 或基于 Lucene 的适当全文搜索框架,例如 hibernate-searchgrails 搜索插件 Elasticsearch 来索引您的字段,以便您可以触发复杂的多词查询

关于java - Grails/GORM withCriteria 搜索 toString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26176861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com