gpt4 book ai didi

Grails 2.3.7 Rest API - 搜索/查询

转载 作者:行者123 更新时间:2023-12-04 05:06:20 25 4
gpt4 key购买 nike

我正在使用 Grails 2.3.7。我通过覆盖 restfull Controller 接口(interface)将我的 Controller 公开为 REST Controller 。我的客户是 AngularJS。我的 CRUD 操作运行良好。我现在需要在各种对象上编写搜索 API,例如在帐户名称和号码上搜索或在客户电子邮件上搜索客户对象。

编写此类搜索 API 的有效且最佳方法应该是什么?我可以为每个搜索条件编写一个 API,但寻找可以将搜索条件作为 JSON 发布并应用于相应资源对象的通用内容。有没有这样的通用方法来实现这个?

周杰伦

最佳答案

我认为这里的问题是搜索 是一个相当大的领域。

如果您需要真正的搜索功能,您一定要看看第三方搜索服务器,例如 solrelasticsearch以及相应的 Grails 插件。这些产品根据您的数据创建单独的索引,并提供分面搜索、查询输入的拼写建议、结果突出显示等功能(并且具有高度可扩展性)。

但是,既然您提到您不想使用第三方库,您可能正在寻找更简单的东西。

您的问题的一个非常基本的解决方案可能是这样的:

class CustomerController extends RestfulController {

...

def search(String property, String value) {
respond Customer.createCriteria().list {
like property, "%$value%"
}
}
}

这会创建一个 Gorm criteria query查询具有匹配 SQL like 字段的 Customer 对象条件。

使用像这样的 url 调用此操作

/customer/search?property=lastname&value=foo

将返回所有 lastname 包含 foo 的客户。

通过为域类使用附加参数,您可以轻松地使此操作更通用:

def searchWithClass(String className, String property, String value) {
def domainClass = grailsApplication.getDomainClass(className).clazz
respond domainClass.createCriteria().list {
like property, "%$value%"
}
}

现在您可以使用className 参数传递您要查询的域类:

.../searchWithClass?property=lastname&value=foo&className=foo.bar.Customer

但是在使用这样的方法时要记住一些事情:

  • SQL like 查询的性能可能不是最好的(尤其是当您有非常大的文本字段时)
  • 您只能使用这种方式查询字符串字段。对于数字或日期等其他数据类型,您需要不同的解决方案
  • 确保验证并限制搜索参数。否则,可以查询您应用程序中的每个域类。

关于Grails 2.3.7 Rest API - 搜索/查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22767092/

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