MongoDB Index Array работает только частично - PullRequest
1 голос
/ 12 февраля 2012

Я знаю, что на эту тему уже много, но ни один из вопросов не помогает мне в этом.У меня есть File-Upload-System через 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', 'unique' и т.д ...

Я попробовал все. Я удалил индексы с помощью;

> db.fs.files.dropIndexes()

И создал их сноваВсегда контролирую с помощью

> db.fs.files.getIndexes()

Но нет, я не могу получить никаких результатов ...

Я также пытался выполнить индексацию через PHP сразу после сохранения файла в базе данных.Для этого я использую следующий код:

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

Или также без уникальной опции.


Как я уже говорил, иногда это работает, и я могу запрашивать ключевые слова, но иногда яне может. Или некоторые ключевые слова найдены, но других документов нет. Может быть, индексы не созданы для каждого документа одинаково ???

Пожалуйста, кто-нибудь поможет мне в этом, я действительно неЗдесь проблема не возникает!

Спасибо уже.

1 Ответ

3 голосов
/ 12 февраля 2012

Я предлагаю вам использовать истинный массив в ключевых словах:

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

Итак, ожидается следующее:

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