我在stackoverflow上找了这个问题,但没有找到一个非常好的答案。
我有一个MySQL数据库,其中包含一些表格,其中包含有关特定产品的信息。当最终用户在我的应用程序中使用搜索功能时,它应该在特定列中搜索所有表。
因为连接和许多where子句表现不好,所以我创建了一个存储过程,它将这些表和列中的所有单个单词分开,然后将它们插入表中。它是'word'和'productID'的组合。 该表现在包含超过330万条记录。
目前,如果我匹配整个单词或单词的开头(LIKE'searchterm%'),我可以快速搜索。这很明显,因为它现在使用索引。
然而,我的客户想要搜索部分单词(LIKE'%searchterm%')。这完全没有表现。此外,FULLTEXT搜索不是选项,因为它只能搜索单词的开头,后面带有通配符。
那么像这样的搜索功能的最佳实践是什么?
答案 0 :(得分:2)
答案 1 :(得分:1)
MySQL不适合文本搜索。使用其他软件来做到这一点。例如,使用Sphinx为文本搜索索引数据。它会做得很好,设置起来非常简单。如果你使用MySQL 5.1,你可以使用sphinx作为引擎。
还有其他服务器可以比Spinx更好地执行文本搜索,但它们不是免费的,或者需要安装其他软件。
您可以详细了解:ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?