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