繁体   English   中英

MongoDB搜索-自动完成

[英]MongoDB search - autocomplete

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

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

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

很难说,因为我们没有搜索查询,但是值得一提的是,在查看了文档之后,如果模式以一个常量作为前缀,那么在使用RE搜索时,MongoDB似乎可以使用索引。 仅当锚定时才为字符串:

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

因此,引用该文档:

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

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

首先,您将必须仔细设计查询。 谨慎地选择正确索引的字段并进行相应的设计。 另外,如果您使用正则表达式,请确保以强制查询使用索引字段的方式编写正则表达式。 像/ ^ prefix /这样的东西就可以了。 [参见此链接: http : //docs.mongodb.org/manual/reference/operator/query/regex/#index-use ]

我已经看到许多使用mongodb范围查询的实现,但是我不确定那是否是最好的,因为瞬时结果是关键。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM