我正在为我的应用实施搜索结果视图。 我发现mongoose内部提供带有$ text的全文搜索功能。
我将下面的代码放到Post.js
PostSchema.index({desc: 'text'}); //for example
这是我在路由文件route / posts.js中放入的代码
Post.find({$text: {$search : 'please work!'}}).exec(function (err, posts) {...})
我提出的错误消息在
之下Index with pattern: { _fts: "text", _ftsx: 1 } already exists with different options
是否有任何机构知道如何处理此错误并弄明白? 谢谢你。
答案 0 :(得分:5)
检查您定义了文本索引的字段。现在mongodb每个集合只允许一个文本索引。因此,如果您在desc列上定义了一个文本索引并尝试在其他列上使用该索引,则必然会出现此错误。
您可以尝试查询索引并查看您创建它的列。要获得索引,你可以做
import java.util.*;
public class Add
{
ArrayList<Test> nTest;
public Add()
{
nTest = new ArrayList<Test>();
}
public void addTest(Test test)
{
nTest.add(new Test());
}
}
它将返回类似这样的内容
db.collection.getIndexes()
现在,如果您想在其他列中使用此范围以使用此索引,只需删除此索引
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "some.ns"
},
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "desc_text",
"ns" : "some.ns",
"weights" : {
"title" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 2
}
]
然后通过包含要包含在文本索引
中的所有列来重新创建它db.collection.dropIndex('desc_text');