【问题标题】:Requesting any row that matches optional criteria in MySQL请求与 MySQL 中的可选条件匹配的任何行
【发布时间】:2021-06-20 20:22:39
【问题描述】:

基本上我想做的是以下。使用 React 和 Express 我创建了一个网页,其中专门有一个部分负责搜索用户。 问题是请求中并非总是存在所有输入,我想从数据库中提取所有匹配至少 1 个字段的行

例如,假设我有包含以下字段的用户表:姓名、电子邮件和地址。现在,从前端用户只输入人名(因此其他两个字段将不完整)。我的意图是所有现有的匹配项都来自数据库(即使名称输入不完整)

另一个例子:

我做的第一件事是寻找我可以使用的搜索引擎,这样我就不必自己思考和开发查询逻辑。这就是我找到 ElasticSearch 的方法,我一直在寻找它,我知道它可以完成,但它似乎不是“正确”的东西,因为 ElasticSearch 与 Documents 一起使用(更面向NoSQL 数据库)。接下来,我发现了一个叫做“全文搜索”的东西,这似乎是一种开发高效算法的技术。

我可以实施什么解决方案?事实是,我到处寻找,我迷失了,因为它给我的印象是我想做的事情是不可能的,或者可能很牵强。

【问题讨论】:

  • 我想从数据库中取出所有匹配至少 1 个字段的行。 如果是这样,则必须使用 OR 运算符组合单独的条件。 用户只输入人名(因此其他两个字段将不完整)从查询中排除非指定条件的条件,或添加检查参数是否已设置。

标签: mysql sql node.js express elasticsearch


【解决方案1】:

“全文搜索”是 MySQL 的一项功能,它在字段上使用全文索引,提供了一种在具有许多字符或单词的文本字段上搜索文本的好方法。

在你的情况下,我看到了两个解决方案:

  • 只需使用 LIKE 语句(电子邮件 LIKE '%email%'),
  • 使用 Apache SOLR 等功能强大的搜索引擎,根据需要为字段编制索引,并提供出色的搜索条件,但如果需要复杂的搜索,此解决方案非常有用。

所以我认为第一个解决方案适合你的情况,第二个就像在飞行中使用火箭筒;-)

【讨论】:

    猜你喜欢
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2011-04-18
    相关资源
    最近更新 更多