1

我知道关于这个主题已经有很多了,但是没有一个问题能帮助我继续下去。我有一个通过 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" }

如您所见,我有一个字段“关键字”,它是一组关键字。我想建立一个搜索选项来搜索这个字段,类似于全文搜索。因此,我分别索引了“关键字”字段。

db.fs.files.ensureIndex({ keywords : 1 })

现在的问题是,这有时有效。或者说昨天它在某些文件上工作,但在某些文件上却找不到任何东西。

假设我做了上面的索引,我会认为

> db.fs.files.find({keywords : "Vader"})

会给我上面打印的文件。还是我错过了什么?

(我唯一的解释是:创建索引需要很长时间,而且还没有准备好,这实际上是不可能的,或者选项“背景”、“dropDups”有问题,“独特”等...

我什么都试过了。我删除了索引;

> db.fs.files.dropIndexes()

并再次创造了它们。始终通过控制

> db.fs.files.getIndexes()

但是不,我无法得到任何结果...

在将文件保存在数据库中之后,我还尝试通过 PHP 进行索引。为此,我使用以下代码:

    $gridFS->ensureIndex(array('keywords' => 1), array("unique" => true));

或者也没有独特的选项。


正如我所说,有时这可行,我可以查询关键字,但有时我不能。或者找到了一些关键字,但没有找到其他文档的关键字。难道索引不是为每个文档创建的吗???

请有人帮助我,我真的不明白这里的问题!

已经谢谢了。

4

1 回答 1

3

我建议您在关键字中使用真正的数组:

"keywords" : ["Darth", "Vader", "Haut", "Putz", "Pushy"],

因此,预计以下内容将起作用:

db.fs.files.ensureIndex({ keywords : 1 })
db.fs.files.find({keywords : "Vader"})
于 2012-02-12T15:16:59.577 回答