【问题标题】:Best way to search for partial words in large MySQL dataset在大型 MySQL 数据集中搜索部分单词的最佳方法
【发布时间】:2012-01-03 06:56:10
【问题描述】:

我在 stackoverflow 上寻找过这个问题,但没有找到真正好的答案。

我有一个 MySQL 数据库,其中包含一些包含特定产品信息的表。当最终用户在我的应用程序中使用搜索功能时,它应该搜索特定列中的所有表。

由于连接和许多 where 子句的性能不太好,我创建了一个存储过程,它将这些表和列中的所有单个单词拆分,并将它们插入到表中。它是“word”和“productID”的组合。 该表现在包含超过 330 万条记录。

目前,如果我匹配整个单词或单词的开头(LIKE 'searchterm%'),我可以快速搜索。这很明显,因为它现在使用索引。

但是,我的客户想要搜索部分单词(LIKE '%searchterm%')。这根本没有表现。 FULLTEXT 搜索也不是选项,因为它只能搜索单词的开头,后面有通配符。

那么,这样的搜索功能的最佳做法是什么?

【问题讨论】:

  • 在 SQL 查询中使用前导通配符优化 LIKE 搜索确实没有什么好方法。

标签: mysql search search-engine large-data


【解决方案1】:

MySQL 不适合文本搜索。使用其他软件来做到这一点。例如,使用 Sphinx 为文本搜索索引数据。它会做得很好,而且设置起来非常简单。如果你使用 MySQL 5.1,你可以使用 sphinx 作为引擎。

还有其他服务器可以比 Spinx 更好地执行文本搜索,但它们不是免费的或需要安装其他软件。

您可以阅读更多关于:ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?

【讨论】:

    【解决方案2】:

    虽然需要进行更多设置工作,但您可能正在寻找使用专用全文搜索包(如 LuceneSolr)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 2020-12-04
      相关资源
      最近更新 更多