mongo db中全文搜索查询中的保留字(Where,from和)

时间:2019-01-07 09:28:54

标签: mongodb mongodb-query

我正在使用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"
        }
    });

这一次它起作用了。 因此,我得出一个结论,即“ where”是保留关键字,不能按原样使用它。所以我尝试了转义字符:

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

但是我没有得到结果。

正在发生相同的情况
and , from , * 

请对此提供帮助,如何使用这些单词进行查询。

1 个答案:

答案 0 :(得分:1)

在MongoDB中,像wherefrom之类的单词被视为stopwords。这意味着,当您创建文本索引时,这些单词会从索引中消失,因为它们在英语中非常频繁地出现,而FTS的重点是为一些单词建立索引,从而使您可以轻松地找到所需的文档。要解决此问题,可以创建将语言指定为none的文本索引,请尝试:

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

然后您的查询应该返回帖子中提到的文档。