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

发布于 2024-12-17 10:29:18 字数 432 浏览 1 评论 0原文

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

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

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

目前,如果我匹配整个单词或单词的开头(例如“searchterm%”),我可以非常快速地进行搜索。这是显而易见的,因为它现在使用索引。

但是,我的客户想要搜索部分单词(例如“%searchterm%”)。这根本就没有表演。此外,全文搜索也不是选项,因为它只能搜索单词的开头,后面带有通配符。

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

I've looked for this question on stackoverflow, but didn't found a really good answer for it.

I have a MySQL database with a few tables with information about a specific product. When end users use the search function in my application, it should search for all the tables, in specific columns.

Because the joins and many where clauses where not performing really well, I created a stored procedure, which splits all the single words in these tables and columns up, and inserts them in the table. It's a combination of 'word' and 'productID'.
This table contains now over 3.3 million records.

At the moment, I can search pretty quick if I match on the whole word, or the beginning of the word (LIKE 'searchterm%'). This is obvious, because it uses an index right now.

However, my client want to search on partial words (LIKE '%searchterm%'). This isn't performing at all. Also FULLTEXT search isn't option, because it can only search for the beginning of a word, with a wildcard after it.

So what is the best practice for a search function like this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅沫记忆 2024-12-24 10:29:18

虽然需要设置更多工作,但可以使用专用的全文搜索包,例如 Lucene 或 < a href="http://lucene.apache.org/solr/" rel="nofollow">Solr 可能就是您正在寻找的。

While more work to set up, using a dedicated fulltext search package like Lucene or Solr may be what you are looking for.

提笔落墨 2024-12-24 10:29:18

MySQL 并没有很好地适应文本搜索。使用其他软件来做到这一点。例如,使用 Sphinx 为数据建立索引以进行文本搜索。它会做得很好,而且设置起来非常简单。如果您使用 MySQL 5.1,您可以使用 sphinx 作为引擎。

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

您可以阅读有关以下内容的更多信息: ElasticSearch、Sphinx、Lucene、索尔,Xapian。哪个适合哪种用途?

MySQL is not well tailored for text search. Use other software to do that. For example use Sphinx to index data for text search. It will do a great job and is very simple to set up. If you user MySQL 5.1 you could use sphinx as an engine.

There are other servers for performing text search better than Spinx, but they are eather not free or require other software installed.

You can read more about: ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文