MongoDB: $или полнотекстовый поиск и $in
проблема
Привет. У меня есть то, что мне кажется странной проблемой, и я в недоумении:
давайте:
tags = [ ObjectId('a'), ObjectId('b') ]
search = { $search: 'abc' }
теперь следующий запрос работает нормально:
db.entries.find({ $or: [ {$text:search} ] })
и этот тоже:
db.entries.find({ $or: [ {tags:{$in:tags}} ] })
но объединить их:
db.entries.find({ $or: [ {$text:search}, {tags:{$in:tags}} ] })
и я получаю следующую ошибку:
Unable to execute query: error processing query: ns=db.entries
Tree:
$or
tags $in [ ObjectId('a'), ObjectId('b') ]
TEXT : query=abc, language=, tag=NULL
Sort: {}
Proj: {}
No query solutions
мета-данных
- я использую версию MongoDB
2.6.4
. - объединение любое из условий с простым
{_id:"c"}
выражение работает нормально. - у меня есть мои текстовые индексы, настроенные правильно.
- порядок, в котором появляются условия
$or
-array не влияет на результат.
у меня вопрос
помочь? :(
1 ответов
выполнение запроса в немного другой среде привело к гораздо более четкой ошибке:
Runner error: BadValue error processing query: ns=webistor.entries limit=0 skip=0
Tree: $or
tags $in [ ObjectId('a') ObjectId('b') ]
TEXT : query=abc, language=, tag=NULL
Sort: {}
Proj: {}
planner returned error: Failed to produce a solution for TEXT under OR - other non-TEXT clauses under OR have to be indexed as well.
Примечание
другие НЕТЕКСТОВЫЕ предложения под или должны быть проиндексированы также
видимо, мне придется добавить индекс в tags
.