【问题标题】:mysql search enginemysql搜索引擎
【发布时间】:2012-10-20 06:32:46
【问题描述】:

我需要你的意见... 我正在 PHP 和 MYSQL(AZURE 环境)中开发应用程序。 我在 MYSQL 中为该应用程序编写了一个搜索引擎。 搜索引擎应该索引页面。每一页都被“拆分”为单词,并且为每个单词创建了一个表格,其中包含该单词出现的所有地址。

例如,如果客户端查找单词“tablet”,应用程序会访问一个名为“tablet”的表,并将提取表中的所有地址。 如果您正在搜索这两个词,则检索两个相关表的所有地址并执行切割每个地址。​​

问题是至少 10 000 个单词,即 10 000 个表格。 DATABASE中是否存在大量表的问题? 使用微软的云服务器(AZURE)是否改善了这种情况? DATABASE 是在写入分配云中的表,还是只创建它们,然后由云处理并为我安排它们?

【问题讨论】:

  • 为什么要为每个单词创建一个表格?
  • 每个单词都有单独的表格吗?这似乎是一个非常低效的设计。
  • 如果你有这样一个奇怪的数据库设计,你应该解释你为什么选择这个。
  • 我会查看 MySQL 全文搜索 - dev.mysql.com/doc/refman/5.0/en/fulltext-search.html 和许多其他模型。每个单词一个表是一个荒谬的设计

标签: php mysql search database-design


【解决方案1】:

您正在做的是复制倒排索引模式已经做的事情。您应该查看 Lucene (java) 或 lucene.net (.net) 以获得非常成熟的索引实现,它是开源的。

正如上面提到的 cmets 对每个单词(在 lucene 中称为术语)有一个表是不可扩展的。

【讨论】:

    【解决方案2】:

    您应该考虑为您编制索引的解决方案。 Apache Lucene 就是其中之一http://lucene.apache.org/core/,如果您使用的是 PHP,也有这种语言的实现 (framework.zend.com)

    我还建议使用 Sphinx Search http://sphinxsearch.com。这是一个很棒的工具,可以为你做索引。它将索引数据库中的数据,并提供一个您可以在 ANSI SQL 中查询的接口。

    【讨论】:

    • 感谢所有回复我的目标是多表是为了减少搜索时间。 1. 不用看 - 我翻了相关表格,拉出1000个得分最高的结果 1. 我可以同时搜索字数 3. 缩小表格的大小。不需要在我读到的关于搜索引擎的表格的每一行中添加单词。一开始我想建立一个搜索引擎,然后我想让搜索更直观,例如如果用户写“我想摆脱我的车”然后归类为“卖车”。
    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 2012-06-04
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    相关资源
    最近更新 更多