gpt4 book ai didi

c# - 用于搜索多列的 MySQL 索引

转载 作者:行者123 更新时间:2023-11-29 03:10:33 24 4
gpt4 key购买 nike

我很想知道人们是怎么想的,我们的开发团队非常小,现场没有真正的(核心)数据库专业知识。

我们正在确定一个新项目的范围,该项目需要“智能搜索”,这意味着他们指定了模糊搜索,例如:

一个人的记录(由于事务需要保存在 innodb 中)

  • Firstname (varchar)
  • Lastname (varchar)
  • EmailAddress (varchar)
  • Lastlogin (datetime – updated on each login)
  • LastOrder (datetime – updated when an order is accepted)

他们希望能够搜索任何或多个字段,包括日期列的范围和 varchars 的部分完成,例如:

  • Firstname + lastOrder
  • “Steve” would return all names begging with Steve such as “Steve and Steven” (like?)
  • Lastname + EmailAddress + LastLogin
  • Lastlogin BETWEEN 2011-01-01 AND 2012-01-01
  • Lastorder < 2012-01-01

我理解其中一些示例非常具体,并且“应该”始终只返回一行,但这是一个要求示例,而不是确切的结构。

我们正在决定如何最好地实现它,没有人能同意(像往常一样!)我很想知道其他人如何在功能上实现这一点以及他们为什么选择该解决方案。

  1. 为每一列建立索引——不是很理想,而且占用大量内存
  2. 复合索引 – 无法预测要搜索的列的顺序或数量
  3. 在 MyISAM 中创建一个条目并使用 FULLINDEX,例如“MyFirstName MyLastName me@mycompany.com”——缺点是无法比较日期范围
  4. 使用 lucene.net 或类似的索引服务(很难在我们的 3 个面向 Web 的 IIS 服务器上实现,并且出现与 #3 类似的问题)
  5. 保存数据变化的 View ——缺点是需要索引和更多的内存/CPU 使用率,没有实际好处
  6. 笨拙的查询:

    SELECT
    (Firstname LIKE “Steve%”) as fn_matched_data
    (Lastlogin BETWEEN 2011-01-01 AND 2012-01-01) as ll_matched_data
    FROM TABLE
    WHERE Firstname LIKE “Steve%” OR Lastlogin BETWEEN 2011-01-01 AND 2012-01-01

我知道存在相互冲突的规范——想要同时搜索所有内容,同时应用范围等。我真的想告诉企业我们不是谷歌,并降低他们对搜索要求的期望。

提前致谢。

最佳答案

听起来您应该考虑一个专门的外部搜索解决方案,例如 SOLR

关于c# - 用于搜索多列的 MySQL 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136053/

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