我试图在数据库中搜索,但我没有得到任何结果,也无法找到错误, 我在控制台中得到一个空数组,但数据库中充满了包含" a"在这种情况下。
如果我试图在数据库中找到所有结果,我会看到所有结果,所以它在$ search或$ text中会破坏脚本。
非常感谢所有的帮助我已经坐了几天并且撕裂了我的头发!
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
var db;
MongoClient.connect("mongodb://localhost:27017/insights", function(err, database) {
db = database;
db.collection("textstore", {}, function(err, coll) {
if (err != null) {
db.createCollection("textstore", function(err, result) {
assert.equal(null, err);
});
}
db.ensureIndex("textstore", {
document: "text"
}, function(err, indexname) {
assert.equal(null, err);
});
});
});
app.post("/search", function(req, res) {
db.collection('textstore').find({"$text": {"$search": 'a'}}).toArray(function(err, items) {
console.log(items)
})
});
答案 0 :(得分:2)
搜索MongoDB text index具有语言感知能力,默认语言为英语。语言意识意味着某些非常常见但通常毫无意义的词语会被忽略。英语中的单词a
就是这样一个单词。这是t he relevant part from the documentation:
MongoDB支持各种语言的文本搜索。文本索引删除特定于语言的停用词(例如英语,“the”,“an”,“a”,“and”等),并使用简单的语言特定后缀词干。
尝试通过明确地将语言设置为"none"
来尝试搜索更有意义的内容或禁用语言感知。
db.collection('textstore').find({"$text": {"$search": 'a', $language:"none"}})
顺便说一下,您还可以在创建索引时覆盖默认语言,甚至可以在文档和子文档级别覆盖它。有关详细信息,请check the documentation about specifying languages for text indexes。