在大型MySQL数据集中搜索部分单词的最佳方法

时间:2011-11-21 19:38:59

标签: mysql search search-engine large-data

我在stackoverflow上找了这个问题,但没有找到一个非常好的答案。

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

因为连接和许多where子句表现不好,所以我创建了一个存储过程,它将这些表和列中的所有单个单词分开,然后将它们插入表中。它是'word'和'productID'的组合。 该表现在包含超过330万条记录。

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

然而,我的客户想要搜索部分单词(LIKE'%searchterm%')。这完全没有表现。此外,FULLTEXT搜索不是选项,因为它只能搜索单词的开头,后面带有通配符。

那么像这样的搜索功能的最佳实践是什么?

2 个答案:

答案 0 :(得分:2)

虽然需要设置更多工作,但使用LuceneSolr这样的专用全文搜索包可能正是您所寻找的。

答案 1 :(得分:1)

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

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

您可以详细了解:ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?