我正在尝试使用多个字段进行mongodb全文搜索.我已经在3个字段设置了索引 - 名称,描述,类别,并通过验证
document.collection.getIndexes (),返回 -
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "document.collection"
},
{
"v" : 1,
"key" : {
"name" : 2,
"description" : 1,
"category" : 1
},
"name" : "name_2_description_1_category_1",
"ns" : "document.collection",
"background" : true,
"safe" : null
}
]
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试执行文本搜索,请使用以下命令 -
db.collection.find( {$text:{$search:'alias'}} ).limit(10)
Run Code Online (Sandbox Code Playgroud)
收到以下错误消息:
error: {
"$err" : "Unable to execute query: error processing query: ns=document.collection limit=10 skip=0\nTree: TEXT : query=alias, …Run Code Online (Sandbox Code Playgroud) 上下文:我有一个填充了大量电子邮件的MongoDB.我想在以下任何字段中搜索包含给定电子邮件地址的所有电子邮件:收件人,收件人,CC和BCC.结果需要按字段Date排序.我们目前正在尝试以下查询:
db.collection.find({ $text : {$search: "\"email@domain.com\""}}).sort({Date:1})
Run Code Online (Sandbox Code Playgroud)
我已经尝试过复合索引,包括日期,但它不起作用.
有了这个指数......
db.collection.createIndex({Date: 1, From:"text", To:"text", CC:"text", BCC:"text"})
Run Code Online (Sandbox Code Playgroud)
它给出了错误17007,因为Date应该具有相等匹配,因为它是一个前缀.这不是一个选项,因为我们喜欢所有电子邮件,无论日期如何.
还有这个其他指数......
db.collection.createIndex({From:"text", To:"text", CC:"text", BCC:"text", Date:1})
Run Code Online (Sandbox Code Playgroud)
然后,当它超过排序的内部限制时,它会给出错误17144.
我们已经阅读了以下内容:
在这些参考文献和其他参考文献中,我认为这是不可能的,但我不认为我们想要做的是非典型或开箱即用.
我们做错了吗?有没有办法用复合索引或任何其他MongoDB功能进行此查询?
谢谢!