Node.js 文本搜索没有';某些单词不能返回任何内容
我有一个包含“条目”集合的数据库,其结构如下:Node.js 文本搜索没有';某些单词不能返回任何内容,node.js,mongodb,Node.js,Mongodb,我有一个包含“条目”集合的数据库,其结构如下: { tags: [ { type: mongoose.Schema.Types.ObjectId, ref: "Tag" } ], body: String } 我想在我的网站上有一个搜索功能,所以我在“body”属性上创建了一个文本索引,如下所示: db.entries.createIndex( { body: "text" } ) 它工作
{
tags: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Tag"
}
],
body: String
}
我想在我的网站上有一个搜索功能,所以我在“body”属性上创建了一个文本索引,如下所示:
db.entries.createIndex( { body: "text" } )
它工作得很好。我创建了两个条目并运行了db.entries.find()
。我明白了:
{ "_id" : ObjectId("5c2e3d9fd1d5dd121ed85695"), "tags" : [ ], "body" : "some text", "__v" : 0 }
{ "_id" : ObjectId("5c2e3dadd1d5dd121ed85696"), "tags" : [ ], "body" : "text some", "__v" : 0 }
到目前为止,一切顺利。我搜索db.entries.find({$text:{$search:{$search:{$text}})
并返回这两个条目。但是当我搜索db.entries.find({$text:{$search:{$search:{$some}})
时,我什么也没有得到
我用不同的词又试了一遍。“教堂”很好用,但“更多”也不会回报任何东西。为什么???MongoDB文本索引会删除一些被认为是特定语言的单词,
一些是其中之一。要解决此问题,您可以使用默认语言“none”
建立索引-这可以防止任何停止字和整个内容被索引:
db.entries.createIndex(
{ body : "text" },
{ default_language: "none" }
)
英语stopwords的完整列表。您可以在mongo shell中运行以下命令,以便在
createIndex({body:“text”});
下一个
find({$text:{$search:“some text”}});
或-或
find({body:{$in:“some text”}})
我正在尝试我最好的答案,我认为它是有用的…如果不工作,不要麻烦有什么理由你必须使用文本(字符串)而不是像regex这样的东西吗?类似于db.entries.find({body:/text/ig})
?我不是很有经验,所以我对正则表达式几乎一无所知。不过我做了一些调查。我知道“I”是不必要的,因为默认情况下MongoDB文本搜索不区分大小写,我认为使用“g”只会增加服务器响应时间,没有任何额外的好处。这很有效,谢谢!我想答案就在那里,我只是不知道该找什么。