我正在try 使用多个字段进行mongodb全文搜索.

document.collection.getIndexes (),

[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "document.collection"
    },
    {
        "v" : 1,
        "key" : {
            "name" : 2,
            "description" : 1,
            "category" : 1
        },
        "name" : "name_2_description_1_category_1",
        "ns" : "document.collection",
        "background" : true,
        "safe" : null
    }
]

现在,如果我try 执行文本搜索,使用以下命令-

db.collection.find(  {$text:{$search:'alias'}}  ).limit(10)

收到以下错误消息:

error: {
    "$err" : "Unable to execute query: error processing query: ns=document.collection limit=10 skip=0\nTree: TEXT : query=alias, language=, tag=NULL\nSort: {}\nProj: {}\n planner returned error: need exactly one text index for $text query",
    "code" : 17007
}

我试过谷歌和mongodb文档,但什么都找不到.

推荐答案

您应该在要搜索的字段上创建一个text index:

db.deals.ensureIndex({ name: "text", description : "text", category : "text" });

根据$text操作员的文件:

$text对使用索引的字段的内容执行文本搜索

为三个字段创建的索引是复合索引,而不是文本索引.文本索引如下所示:

{
    "v" : 1,
    "key" : {
        "_fts" : "text",
        "_ftsx" : 1
    },
    "name" : "name_text_description_text_category_text",
    "ns" : "test.deals",
    "weights" : {
        "category" : 1,
        "description" : 1,
        "name" : 1
    },
    "default_language" : "english",
    "language_override" : "language",
    "textIndexVersion" : 2
}

Mongodb相关问答推荐

MongoDB:子文档中仅存在于父文档中的返回字段?

MongoDB—基于数组中同一文档中的另一个字段更新字段

如何使用MongoDB对子文档进行条件投影?

Mongo DB-如果一个特定字段有多个文档匹配,则更新文档字段

如何使用内部数组中的值更新文档

使用mongo'db.Decode(&dto)映射一个嵌套的 struct

随着时间的推移在 mongodb 中获得

根据状态过滤 mongoDb 中的结果

使用 mgo 从 golang 中的 Mongodb 中 Select 列

是否可以迭代 mongo 游标两次?

无法连接到mongolab主机

mongodb 中的 --bindip 配置选项有什么作用?

MongoDB 中 cursor.count() 和 cursor.size() 之间的区别

使用管道聚合的 Spring Data MongoDB 查找

Mongoose.js 通过一个 connect() 调用创建到 MongoDB 的多个连接

MongoDB Java API:put() 与 append()

MongoDB Compass 过滤器(查询)

Mongo按实际上是数字的字符串值排序

Mongoose:Model.create 和 Collection.insert 有什么区别

我可以只获取 Cursor 对象(pymongo)中的第一项吗?