MongoDB Index Array работает только частично

Я знаю, что на эту тему уже есть много, но ни один из вопросов не помогает мне продолжать. У меня есть 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' "уникальный" и т. д.

Я перепробовал все. Я бросил индексы с;

> db.fs.files.dropIndexes()

И создал их снова. Всегда контролировать через

> db.fs.files.getIndexes()

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

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

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

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


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

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

Уже спасибо

1 ответ

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

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

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

db.fs.files.ensureIndex({ keywords : 1 })
db.fs.files.find({keywords : "Vader"})
Другие вопросы по тегам