我知道这个主题已经有很多,但没有一个问题可以帮助我继续。 我有一个通过GridFS的文件上传系统,它生成如下文档:
{ "_id" : ObjectId( "4f3723607b5c0b8d01060000" ),
"filename" : "7326_150970547928_746052928_2521002_2164327_n.jpg",
"filetype" : "image/jpeg",
"title" : "Indexed File 1",
"author" : "chewbacca",
"document" : "Rechnungen",
"keywords" : { "0" : "Darth",
"1" : "Vader",
"2" : "Haut",
"5" : "Putz",
"6" : "Pushy" },
"uploadDate" : Date( 1329013600519 ),
"length" : 61423,
"chunkSize" : 262144,
"md5" : "c73cce0bb6f349007635751f9a1a7ddd" }
正如您所看到的,我有一个字段'keywords',它是一组关键字。 我想建立一个搜索选项来搜索与全文搜索相当的字段。 因此,我单独索引字段“关键字”。
db.fs.files.ensureIndex({ keywords : 1 })
现在的问题是,这有时会起作用。或者说昨天它在一些文件上工作,但在一些文件上它找不到任何东西。
假设我做了上面的索引,我会认为
> db.fs.files.find({keywords : "Vader"})
会给我上面打印的文件。或者我错过了什么?
(我唯一的解释是,这可能是:创建索引需要花费大量时间,而且还没有准备好,这几乎是不可能的,或者选项'背景'存在一些问题, 'dropDups','unique'等......
我尝试了一切。我放弃了索引;
> db.fs.files.dropIndexes()
再次创造它们。始终通过
进行控制> db.fs.files.getIndexes()
但不,我无法得到任何结果......
我还尝试在将数据保存到数据库之后通过PHP进行索引。 为此,我使用以下代码:
$gridFS->ensureIndex(array('keywords' => 1), array("unique" => true));
或者没有唯一选项。
正如我所说,有时候这可行,我可以查询关键字,但有时我不能。或者找到一些关键字,但其他文件没有找到。 是不是每个文档都没有索引?
请有人帮助我,我真的没有在这里得到这个问题!
谢谢。
答案 0 :(得分:3)
我建议您在关键字中使用true数组:
"keywords" : ["Darth", "Vader", "Haut", "Putz", "Pushy"],
因此,预计以下内容将起作用:
db.fs.files.ensureIndex({ keywords : 1 })
db.fs.files.find({keywords : "Vader"})