Ошибка возврата MongoDB - Не удалось создать решение для TEXT в OR. Другие элементы, не относящиеся к TEXT в OR, также должны быть проиндексированы. - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь выполнить запрос на MongoDB через драйвер Java, и я получаю эту ошибку -

"Query failed with error code 2 and error message 'error processing query: ns=Application.Team limit=10Tree: $or
_id == \"TEA000000006\"
TEXT : query=anonoymous, language=english, caseSensitive=0, diacriticSensitive=0, tag=NULL
Sort: { name: 1 }
Proj: { _id: 1, name: 1 }
Collation: { locale: \"en_US\", strength: 1 }
 planner returned error: Failed to produce a solution for TEXT under OR - 
 other non-TEXT clauses under OR have to be indexed as well.' on server 
 localhost:27017"

Кажется, с индексированием, похоже, есть некоторые проблемы. Если я не даю sort или TEXT, похоже, работает. Оба вместе вызывают проблемы

Мне нужен запрос для возврата записей, найденных в текстовом поиске, или если идентификатор находится в переданном списке (в данном случае, TEA0000006)

Мои индексы -

{ 
    "v" : 2, 
    "name" : "myIndex", 
    "ns" : "Application.Team", 
    "weights" : {
         "$**" : 1, 
         "_id" : 1, 
         "name" : 1
    }, 
    "default_language" : "english", 
    "language_override" : "language", 
    "textIndexVersion" : 3
}

{ 
    "v" : NumberInt(2), 
    "key" : {
        "_id" : NumberInt(1)
    }, 
    "name" : "_id_", 
    "ns" : "Application.Team"
}

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Это на самом деле невозможно. См. - https://jira.mongodb.org/browse/SERVER-13803

0 голосов
/ 05 июля 2018

Вам нужно заново создать текстовый индекс без _id и name. $** охватывает все поля. Если вам нужен текстовый индекс только в этих 2 полях, удалите $** из индекса, поэтому он должен выглядеть как {"_id": "text", "name":"text"}

...