sha*_*sh7 3 mongodb node.js mongojs
我有一个如下所示的mongodb文件:
document
title
suburb
id
date
Run Code Online (Sandbox Code Playgroud)
我想添加一个搜索功能,使人们可以通过郊区和标题搜索文档。我正在使用文本搜索功能,我想要这样的东西:
var search = {
$and : [
{ $search:'melbourne' }, // Search in suburb
{ $search:'hello world' } // As well as in title
]
};
db.ad.find(search).sort([['date', -1]]).limit(10).skip(0, callback);
Run Code Online (Sandbox Code Playgroud)
但是上面的代码不起作用。我已经索引了郊区和标题字段并启用了文本搜索。
有谁知道如何制作一个支持两个不同字段的文本搜索的mongodb子句?
我在mongodb v 2.6中使用mongojs
mongodb中的“文本搜索”概念不能那样工作。相反,这里的概念是在“文本索引”中定义“多个字段”, 然后仅搜索术语。
假设您有这样的“东西”:
{ "_id" : ObjectId("55ba22294bde97b581332979"), "title" : "Hello there" },
{ "_id" : ObjectId("55ba22414bde97b58133297a"), "title" : "Hello world" },
{
"_id" : ObjectId("55ba22594bde97b58133297b"),
"title" : "Hello world",
"suburb" : "melbourne"
}
Run Code Online (Sandbox Code Playgroud)
然后,我决定创建一个像这样的文本索引:
db.junk.createIndex(
{ "title": "text", "suburb": "text" },
{ "weights": { "title": 10 } }
)
Run Code Online (Sandbox Code Playgroud)
然后我使用搜索$text:
db.junk.find(
{ "$text": { "$search": "Hello World Melbourne" } },
{ "score": { "$meta": "textScore" } }
).sort({ "score": { "$meta": "textScore" } })
Run Code Online (Sandbox Code Playgroud)
结果如下:
{
"_id" : ObjectId("55ba22594bde97b58133297b"),
"title" : "Hello world",
"suburb" : "melbourne",
"score" : 11.5
},
{
"_id" : ObjectId("55ba22414bde97b58133297a"),
"title" : "Hello world",
"score" : 1.5
},
{
"_id" : ObjectId("55ba22294bde97b581332979"),
"title" : "Hello there",
"score" : 1
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,哪个“两个”都搜索索引中指定的所有字段,并且在这种情况下还考虑了赋予“郊区”字段的额外“权重”,以使其排名更高。
因此,您不会在术语中使用其他条件,而是将“所有”这些术语放在“一个”文本查询字符串中以在多个字段中进行搜索。
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |