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"})

上に印刷された文書を私にくれます。それとも私は何かを逃していますか??

(これが可能である理由の私の唯一の説明は、インデックスを作成するのに多くの時間がかかり、まだ準備ができていないということです。これは事実上不可能です。または、オプション 'background'、'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 に答える