gpt4 book ai didi

mongodb - MongoDB 中的全文搜索和倒排索引

转载 作者:可可西里 更新时间:2023-11-01 10:01:26 25 4
gpt4 key购买 nike

我目前正在研究 MongoDB,看看它有哪些不错的功能。我创建了一个小型测试套件,代表一个包含帖子、作者和评论的简单博客系统,非常基础。

我试验了一个使用 MongoRegEx 类(PHP 驱动程序)的搜索功能,我只是在“lorem ipsum”这句话之后搜索所有帖子内容和帖子标题,“/I”区分大小写。

我的代码是这样的:

$regex = new MongoRegEx('/lorem ipsum/i');  
$query = array('post' => $regex, 'post_title' => $regex);

但我对发生的事情感到困惑和震惊。我检查每个查询的运行时间(在查询前后设置 microtime 并获得 15 位小数的时间)。

在我的第一次测试中,我添加了 110,000 个博客文档和 5000 个作者,所有内容都是随机生成的。当我进行搜索时,它找到了 6824 个带有句子“lorem ipsum”的帖子,并且需要 0.000057935714722 秒来进行搜索。这是我重置了 MongoDB 服务(使用 Windows)之后,除了 _id 上的默认索引之外没有任何索引。

MongoDB 使用 B 树索引,这对于全文搜索来说绝对不是很有效。如果我在我的帖子内容属性上创建一个索引,与上面相同的查询将在 0.000150918960571 中运行,这很有趣,但比没有任何索引要慢(速度为 0.000092983245849)。现在,由于多种原因可能会发生这种情况,因为它使用了 B 树游标。

但我试图寻找一个关于它如何能如此快速地查询的解释。我猜它可能将所有内容都保存在我的 RAM 中(我有 4GB,数据库大约 500MB)。这就是为什么我尝试重新启动 mongodb 服务以获得完整结果的原因。

任何有 MongoDB 经验的人都可以帮助我理解这种带或不带索引且绝对不带倒排索引的全文搜索是怎么回事吗?

真诚的- 梅斯蒂卡

最佳答案

我认为您只是没有对结果进行迭代?仅使用 find(),驱动程序将向服务器发送查询。您需要为此至少获取一个结果。我不相信 MongoDB 这么快,我相信你的错误在你的基准测试中。

作为第二件事,对于^ 锚定在字段值开头的正则表达式搜索,根本不使用索引。你应该玩explain()看看实际发生了什么。

关于mongodb - MongoDB 中的全文搜索和倒排索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10431850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com