MongoDB对字符串数组的全文搜索

时间:2015-04-02 04:50:36

标签: node.js mongodb full-text-search

所以我将Node.js与MongoDB一起用于我的Web应用程序。我在为模式创建文本索引和在数组中搜索文本时遇到了一些麻烦。我已经查看了mongo文档,但没有找到与此相关的任何内容。

我当前的实现在常规字符串值上成功搜索,但查询[String]中的文本匹配并不会返回任何内容。

这是我的REST电话:

...console.log("Query string: " + str); var qry = { "$text": { "$search": str } }; model.find(qry, function (err, results) {...

当我创建我的架构时:

var blah = new Schema({ foo : String, bar : [String],

...

blah.index({ foo: 'text', bar: 'text' });

任何查询都不会返回bar中匹配的结果。 foo内某些内容的查询字符串工作正常。

2 个答案:

答案 0 :(得分:1)

仔细检查您是否在正确的集合上创建了正确的索引,并且正在向正确的集合发出查询。索引数组对我有用:

> db.test.drop()
> db.test.insert({ "_id" : 0, "a" : "dogs are good" })
> db.test.insert({ "_id" : 1, "a" : "I like dogs", "b" : ["where's my dog?", "here, have a cat"] })
> db.test.insert({ "_id" : 2, "b" : ["she borrowed my dog", "my frogs are croaking"] })
> db.test.ensureIndex({ "a" : "text", "b" : "text" })
> db.test.find({ "$text" : { "$search" : "dogs" } }, { "_id" : 1 })
{ "_id" : 0 }
{ "_id" : 2 }
{ "_id" : 1 }

答案 1 :(得分:0)

好的,我终于明白了!事实证明,grunt服务不会更新数据库中的索引。我只为“foo”创建了一个文本索引,并且在向索引添加“bar”时没有更新。我不得不跑 - 在mongo shell:

db.dropDatabase()

下次运行时,会重新创建数据库并设置正确的索引。如果其他人遇到此问题,请尝试运行db.getIndexes()