文字搜索对于某些单词不会返回任何内容

时间:2019-01-03 17:05:02

标签: node.js mongodb

我有一个数据库,其中包含“条目”集合,其结构如下:

db.entries.createIndex( { body: "text" } )

我想在我的网站上使用搜索功能,因此我在“ body”属性上创建了一个文本索引,如下所示:

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: "text" }})

到目前为止,太好了。我搜索db.entries.find({$text: { $search: "some" }}),并返回了两个条目。但是,当我搜索dotnet test "project.csproj" --no-build --verbosity normal --logger:"nunit;LogFilePath=xunit_results.xml" 时却什么也没得到。

我用不同的单词再次尝试了。 “教堂”工作正常,但“更多”也不会返回任何内容。为什么?

2 个答案:

答案 0 :(得分:3)

MongoDB文本索引删除了一些特定于语言的单词,这些单词被视为Stopwords,而some是其中之一。要解决此问题,您可以使用default_language: "none"来建立索引-这样可以防止出现任何停用词,并且可以索引整个内容:

db.entries.createIndex(
    { body : "text" },
    { default_language: "none" }
)

英语停用词here的完整列表。

答案 1 :(得分:0)

您可以在mongo shell中运行以下命令,以允许在 db.entries.createIndex({body:“ text”}); 下一个 db.entries.find({$ text:{$ search:“ some text”}}); 或 db.entries.find({body:{$ in:“ some text”}}) 我正在尝试最好的答案,我认为这很有用...如果不工作,请不要打扰