2011-11-21 50 views
2

我在stackoverflow上找过这个问题,但没有找到真正的好答案。在大型MySQL数据集中搜索部分单词的最佳方法

我有有关特定产品的信息几张桌子MySQL数据库。当最终用户在我的应用程序中使用搜索功能时,它应搜索特定列中的所有表。

由于加入并在不执行得很好很多where子句中,我创建了一个存储过程,其将这些表和列中的所有单个单词起来,将它们插入表。这是'word'和'productID'的组合。 此表包含超过330万条记录。

此刻,我可以搜索我是否匹配整个单词或单词(如“搜索关键词%”)的开始相当快。这很明显,因为它现在使用索引。

然而,我的客户希望对部分字(LIKE '%搜索关键词%')进行搜索。这根本没有执行。此外FULLTEXT搜索不是选项,因为它只能搜索一个单词的开头,后面带有通配符。

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

+0

有真正优化LIKE与SQL查询的领先通配符搜索没有什么好办法。 –

回答

1

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

还有其他的服务器进行文本搜索优于Spinx,但他们eather不是免费的,或者需要安装其它软件。

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

2

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

相关问题