Текстовый поиск 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
}