我尝试在猫鼬中使用$text
和$search
创建搜索功能,但是当查询遇到mongodb英语stop words
时,它卡住了。我尝试将default_language更改为none以忽略stop words
列表,但是后来我意识到我无法更改default_language。
我想知道我的猫鼬总是使用default_language创建索引的方式:英语,即使我直接使用default_language: 'none'
。
这是我的代码:
kataSchema.index({ kata: "text" }, { default_language: 'none' });
然后当我打开mongo shell并键入db.katas.getIndexes()时,它总是向我显示以下内容:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "kata_text",
"background" : true,
"weights" : {
"kata" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
]
我还尝试删除mongo shell中的索引,然后再次运行我的代码,但是它仍然使用英语作为default_language。
我想念什么吗?我已经在各处搜索它,但仍然找不到问题。感谢您的建议。
猫鼬版本:“ ^ 5.10.0”
答案 0 :(得分:1)
我想问题出在 .index 本身。.改用 createIndexes 。
在模型的架构中,尝试以下操作:
.
.
.
const Kata = mongoose.model('Kata', kataSchema);
Kata.createIndexes({ kata: "text" }, { default_language: 'none' });
答案 1 :(得分:1)
Mongoose 5.10.0 和MongoDB 4.4.0 存在相同的问题:
contentSchema.index(
{
title: "text",
shortDescription: "text",
description: "text",
},
{
weights: {
title: 10,
shortDescription: 5,
description: 1
},
default_language: "german",
name: "SearchIndex"
});
只是忽略了权重和 default_language 。更新猫鼬:
npm update mongoose
猫鼬现在的版本为 5.10.16 和 default_language 以及 weights 可以正常工作,而无需进行任何代码修改。
在应用新索引之前,您必须首先删除错误创建的索引。