зарезервированные слова (откуда, и) в полнотекстовом поисковом запросе в монго дБ - PullRequest
0 голосов
/ 07 января 2019

Я использую mongodb, я застрял в проблеме:

Данные:

{ 
    "_id" : ObjectId("5a956e0b78d363d37f6a2ec4"), 
    "fieldType" : "Enter Source", 
    "value" : "Delhi", 
    "catgeory" : "Generic", 
    "synonym" : [
        "origin name or code", 
        "from", 
        "enter source", 
        "from where", 
        "fro wher"
    ]
}

Когда я использую этот запрос

db.getCollection("Rules_DefaultValue").find(
{ 
    "synonym" : "from where"
});

Я получил правильный результат, как и ожидалось

Но когда я использую этот запрос

db.getCollection("Rules_DefaultValue").find(
{ 
    "$text" : {
        "$search" : "where"
    }
});

Я не получил никакого результата, поэтому я изменил его снова

 db.getCollection("Rules_DefaultValue").find(
    { 
        "$text" : {
            "$search" : "wher"
        }
    });

и на этот раз это сработало. Поэтому я пришел к выводу, что «где» является резервным ключевым словом, и я не могу использовать его как есть. Поэтому я попытался с помощью escape-символа:

"$search" : "\"where\""

но опять же я не получил результат.

то же самое происходит с

and , from , * 

Пожалуйста, помогите мне в этом, Как я могу сделать запрос с этими словами.

1 Ответ

0 голосов
/ 07 января 2019

Слова типа where и from считаются стоп-словами в MongoDB. Это означает, что при создании текстового индекса эти слова удаляются из индекса, поскольку они очень часто появляются на английском языке, в то время как цель FTS состоит в том, чтобы проиндексировать некоторые слова, которые позволят вам легко найти искомый документ. Чтобы исправить это, вы можете создать свой текстовый индекс, указав язык none, попробуйте:

db.getCollection("Rules_DefaultValue").createIndex(
    { synonym : "text" },
    { default_language: "none" }
)

Тогда ваш запрос должен вернуть документ, упомянутый в вашем сообщении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...