Текстовый поиск mongodb с несколькими полями
Я пытаюсь получить полнотекстовый поиск mongodb с несколькими работающими полями.
Я установил индекс на 3 поля: имя, описание, категорию и проверено с помощью
document.collection.getIndexes ()
который возвращает -
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "document.collection"
},
{
"v" : 1,
"key" : {
"name" : 2,
"description" : 1,
"category" : 1
},
"name" : "name_2_description_1_category_1",
"ns" : "document.collection",
"background" : true,
"safe" : null
}
]
Теперь, если я попытаюсь выполнить текстовый поиск, используя команду follwing -
db.collection.find( {$text:{$search:'alias'}} ).limit(10)
появилось следующее сообщение об ошибке:
error: {
"$err" : "Unable to execute query: error processing query: ns=document.collection limit=10 skip=0\nTree: TEXT : query=alias, language=, tag=NULL\nSort: {}\nProj: {}\n planner returned error: need exactly one text index for $text query",
"code" : 17007
}
Я пробовал документы google и mongodb, но ничего не нашел.
Ответы
Ответ 1
Вы должны создать текстовый индекс в полях, которые вы хотите найти:
db.deals.ensureIndex({ name: "text", description : "text", category : "text" });
Из документации оператора $text:
$text выполняет текстовый поиск по содержимому полей, индексированных с помощью текстовый индекс.
Индекс, созданный для трех полей, является составным индексом, а не текстовым индексом. Текстовый индекс будет выглядеть следующим образом:
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "name_text_description_text_category_text",
"ns" : "test.deals",
"weights" : {
"category" : 1,
"description" : 1,
"name" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 2
}