首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB搜索-自动完成

问MongoDB搜索-自动完成
EN

Stack Overflow用户
提问于 2015-05-09 18:17:25
回答 2查看 1.4K关注 0票数 2

我们目前在MySQL上运行我们的应用程序,并计划迁移到MongoDB。我们已经移动了一些部件,但存在MongoRegex性能问题。

我们有一个自动完成搜索框,可以连接6个表(索引/非索引字段),并在mysql上以超快的速度返回结果。在MongoDB上,同样的事情执行起来非常慢。只有一次收集大约需要2.3秒。用户必须等待很长时间。连接时间为0.064秒。查询时间2.36秒。我用谷歌搜索了一下,找不到一个完美的答案。每个人都说MongoRegex很慢。如果这是真的,其他公司是如何解决这个问题的?

在MongoDB上运行时,改善自动完成性能/体验的最佳方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2015-05-09 18:34:37

首先,你必须仔细设计你的查询。仔细选择适当索引的字段,并进行相应的设计。另外,如果您正在使用regex,请确保以一种强制查询使用索引字段的方式编写regex。像/^prefix/这样的内容就可以了。[请参阅此链接:http://docs.mongodb.org/manual/reference/operator/query/regex/#index-use ]

我见过许多使用mongodb的范围查询的实现,但我不确定这是不是最好的,因为即时结果是一个关键的东西。

除此之外,我还看到一些推荐前缀树的人。其有效地将前缀存储在字段中,然后将以该特定前缀开始的所有单词作为数组存储在接下来的字段中。这个解决方案听起来令人信服,而且速度很快,因为前缀字段应该被索引,但您还必须考虑存储因素。

票数 1
EN

Stack Overflow用户

发布于 2015-05-09 18:27:50

很难说,因为我们没有搜索查询,但值得一提的是,在查看文档之后,似乎只有当模式是锚定的时,如果模式由常量字符串作为前缀,MongoDB才能够在使用RE搜索时使用索引

http://docs.mongodb.org/manual/reference/operator/query/regex/#index-use

所以,引用这份文件:

如果正则表达式以插入符号(^)或左锚(\A)开头,后跟一串简单的符号,则该正则表达式是“前缀表达式”。例如,通过仅匹配以abc开头的索引值,可以优化正则表达式/^abc.*/。

但是/abc.*/ ou /^.*abc/不会使用索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30138706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档