[英]Mongodb text search multiple fields
我有一個mongodb文件,看起來像這樣:
document
title
suburb
id
date
我想添加一個搜索功能,人們可以通過郊區和標題搜索文檔。 我正在使用文本搜索功能,我想要這樣的東西:
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);
但上面的代碼不起作用。 我已經將郊區和標題字段編入索引並啟用了文本搜索。
有誰知道如何制作支持兩個不同領域的文本搜索的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"
}
然后我決定創建一個這樣的文本索引:
db.junk.createIndex(
{ "title": "text", "suburb": "text" },
{ "weights": { "title": 10 } }
)
然后我使用$text
進行搜索:
db.junk.find(
{ "$text": { "$search": "Hello World Melbourne" } },
{ "score": { "$meta": "textScore" } }
).sort({ "score": { "$meta": "textScore" } })
結果如下:
{
"_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
}
哪個“兩個”搜索索引中指定的所有字段,並且還考慮在這種情況下給予“郊區”字段的附加“權重”以使其成為更受歡迎的排名。
因此,您不要使用其他條件,將“所有”條款放在“一個”文本查詢字符串中以搜索多個字段。
如果要在多個字段上應用文本搜索,則無法使用您的解決方案。為此,您需要創建多個索引並將多個字段聲明為“text”。
它完成如下:
db.yourcollectionname.ensureIndex({field1:"text",field2:"text", ...})
然后運行查詢查詢:
db.yourcollectionname.find({$text:{$search:"keywords"}})
如果你的文本搜索仍然不起作用,我發現這篇文章非常有用http://codewhoop.com/article/MongoDb%20Text%20Search%20in%20fields%20of%20document
它包含您需要遵循的所有步驟,成功運行文本搜索查詢,並根據其相關性對結果進行排序。希望它可以幫助您:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.