有没有快速的方法在任何数据库中进行'%phrase%'搜索?

sou*_*php 7 mysql optimization search autocomplete mongodb

我有一个包含5M行的大型数据集.数据集中的一个字段是'article_title',我想实时搜索我正在我网站上构建的自动完成功能.

我一直在尝试使用MySQL和MongoDB作为潜在的数据库解决方案.这两种表现良好时使用索引,例如用于"东西%",但我需要匹配标题中的字符串,如"%%的东西".

使用前瞻性搜索,MySQL和MongoDB使用索引花费0.01秒,使用完整字符串搜索花费约6秒.

我意识到需要扫描整个数据库以进行字符串字符串类型搜索,那么这个问题的常见方法是什么?对于这个问题,Solr和Sphinx似乎有些过分,所以我尽量避免使用它们.

如果我有一个装有2 GB RAM和40GB SSD的盒子(这是我目前能买得起的),我能否获得亚秒响应时间?提前致谢.

-

更新:我尝试了全文索引,虽然结果非常快,但它并不真正满足字符串中的字符串搜索("presiden"与"总统"不匹配).我正在寻找方法来匹配字符串中的字符串与5M行数据集.

Jon*_*oni 5

对于 MySQL,您可以创建全文索引。简而言之,全文索引通过对每个单词进行索引来使部分文本快速匹配。要创建索引,您可以编写:

alter table YourTable add fulltext index(article_title);
Run Code Online (Sandbox Code Playgroud)

之后,您可以搜索:

select * from YourTable where match(article_title) against ('something');
Run Code Online (Sandbox Code Playgroud)

似乎MongoDB 也有文本索引。我想在任何一种情况下都可以对索引进行微调,因此您必须测试哪种更适合您的情况。

  • 有限制,据我所知,全文索引将索引 *words*: 而模式`%bar%` 将匹配 `foobar`、`barfoo` 和 `foobarfoo`,搜索单词 `bar`在全文索引中不需要找到包含该 *substring* 的单词。还是我对该主题的了解已过时? (3认同)