【发布时间】:2019-06-03 20:38:18
【问题描述】:
我有一个包含字段、姓名、电子邮件和手机号码的联系人集合,其中包含大约 200 万条记录(在一段时间内可能会达到 1000 万条)。我想在使用索引时使用$regex 对名称和电子邮件字段进行不区分大小写的搜索。
我在姓名和电子邮件字段上都创建了文本索引,但在这种情况下部分搜索不起作用。此外,我还尝试了名称和电子邮件字段的索引,并使用了运算符$regex 和不区分大小写的选项,但在这种情况下,索引并未应用于这两个字段。
这是我已经尝试过的:
试过了: {'$text': { $search: searchstring }}
结果:无法搜索部分文本
试过了: {'name': { $regex: 'searchstring', $options: 'i' }}
试过了: {'email': { $regex: 'searchstring', $options: 'i' }}
结果:能够搜索部分文本但不使用索引,因此搜索速度很慢,达到目的
所以基本上我需要在 MongoDB 中实现的功能类似于 SQL Server 中的通配符函数 (%) 1. 非常快的搜索速度(分秒) 2. 能够进行部分搜索。
SQL Server 上的示例应如下所示
select * from tblUsers where username like '%amit%'
我们使用 NodeJS 作为后端,使用 React 作为前端。
以下是索引: [ { “v”:2, “钥匙” : { “_id”:1 }, "名称" : "id", “ns”:“联系人” }, { “v”:2, “钥匙” : { “公司 ID”:1.0, “已删除”:1.0, “_id”:1.0, “列表”:1.0 }, “名称”:“contacts_cmpId_isdel_id_lists”, “ns”:“联系人”, “背景”:真 }, { “v”:2, “钥匙” : { “公司 ID”:1.0, “已删除”:1.0, “_fts”:“文本”, “_ftsx”:1 }, “名称”:“contacts_cmpId_nm_em_mb_unq”, “ns”:“联系人”, “背景”:是的, “权重”:{ “电子邮件地址”:1, “移动”:1, “名称”:1, “唯一标识”:1 }, “默认语言”:“英语”, "language_override" : "语言", “文本索引版本”:3 }, { “v”:2, “钥匙” : { “公司 ID”:1.0, “已删除”:1.0, “电子邮件地址”:1.0 }, “名称”:“companyId_1_isDeleted_1_emailAddress_1”, “ns”:“联系人”, “整理”:{ “语言环境”:“en”, “案例级别”:假, “caseFirst”:“关闭”, “实力”:2, “numericOrdering”:假, “替代”:“不可忽视”, “最大变量”:“点点”, “标准化”:假, “向后”:错误, “版本”:“57.1” } }, { “v”:2, “钥匙” : { “公司ID”:1, “已删除”:1, “名称”:1, “列表”:1, “创建日期”:1 }, “名称”:“contacts_cmpId_isdel_name_lists_crdt”, “ns”:“联系人”, “背景”:真 } ]
这里是解释查询
db.getCollection('contacts').find({companyId: ObjectId('5bfcd53c19ebe6727a000d90'), isDeleted: false, 'name': { $regex: 'test1User', $options: 'i' }}).skip(0).limit(100).explain('executionStats')
及其输出:
“执行统计”:{ “执行成功”:真, “nReturned”:1, “执行时间米利斯”:3634, “totalKeysExamined”:613865, “totalDocsExamined”:613840,}
【问题讨论】:
-
请将
db.yourCollection.getIndices()的输出添加到editing it的问题中 -
@MarkusWMahlberg 这是输出
-
没有文字索引,据我所见...
-
@MarkusWMahlberg 是的,因为部分搜索不需要文本索引,我相信它们对全文搜索很有用。如果您有其他解决此问题的建议,请告诉我。
-
要像
{'$text': { $search: searchstring }}这样的文本搜索工作,必须有一个文本索引。时期。创建文本索引,运行查询。问题解决了;)
标签: node.js mongodb indexing mongoose partial