如何在 GraphQL 中使用通配符执行全名搜索

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

我正在使用

GraphQL
API,并尝试实现一项搜索功能,允许用户按名字、姓氏或全名搜索患者。我目前正在使用带有
ILIKE
运算符的搜索条件,但在搜索中间有空格的全名(例如“Mary John”)时,我无法使其正常工作。

这是我正在使用的搜索条件的示例:

{
  _text: {
    field: "patient.firstName",
    op: ILIKE,
    value: "doe%john"
  }
}

此条件应该匹配名字包含“Doe”后跟“John”的患者,但它没有返回预期结果。

我不确定我正在使用的 GraphQL API 是否按照我期望的方式支持带有通配符的 ILIKE 运算符,或者是否应该采取不同的方法。

这是我的问题:

  • GraphQL API 通常是否支持使用带有 % 等通配符的 ILIKE 运算符来进行字符串字段中的模式匹配?
  • 如果是这样,执行包含空格的搜索(例如搜索全名“Mary John”)的正确语法是什么?
  • 是否有任何最佳实践或替代方法可以在 GraphQL 中实现全名搜索来处理空格和部分匹配?
angular graphql
1个回答
0
投票

简短回答

不幸的是,您提出的问题是一个无法回答的问题。您正在寻找的答案不是 GraphQL 问题,而是您没有问过的后端实现问题。

长答案

像看待 JavaScript 一样思考 GraphQL。它没有规定查询应该做什么,或者它们应该如何工作。它描述了如何定义变量、如何定义函数或本机类型是什么。这是 JavaScript 的等效问题:

如何将变量传递到 JavaScript 函数中以使其按名字和姓氏在数据库中搜索用户?

那里的答案,就像这里的答案一样,完全取决于该函数的外观、该函数的作用以及该函数使用的数据库驱动程序。编写该函数的人几乎可以做到任何事情

示例

这是您所问的 GraphQL 问题的有效后端实现,答案是“您无法对查询执行任何操作来获得您想要的结果”。

const searchHandler = (parent, args, context, info) => {
  return false;
}

这也是一个有效的后端实现,答案是“这取决于患者数据源正在做什么。它是否使用 MongoDB、Oracle、MySQL、Postgres、内存数据?它是否以奇怪的方式解析参数,通过字符串插值将它们从 JSON 转换为字符串?

const searchHandler = (parent, args, context, info) => {
  const dataSource = context.dataSources.patient;

  return dataSource.search(args);
}

所以您需要问的问题包括:

  1. GraphQL 架构
  2. 后端框架、实现和解析器代码
  3. 数据库驱动和数据层实现代码
  4. 如果您正在使用某些“开箱即用的解决方案”,请提供其名称以及您尝试使用的文档的链接。
© www.soinside.com 2019 - 2024. All rights reserved.