MongoDB 文本索引和文本搜索

wuc*_*ang 5 mongodb full-text-search

我有一个MongoDB集合db.articles,它有2个键,“标题”和“摘要”。我想对这两个键进行文本搜索。例如,搜索文本是“物理”,我想要所有文档返回其“标题”或“摘要”包含关键字“物理”。但是如何创建文本索引以满足我的命令确实让我困惑:

我应该为它们创建两个单独的文本索引,如下所示:

db.articles.ensureIndex({title:"text"})
db.articles.ensureIndex({abstract:"text"})
Run Code Online (Sandbox Code Playgroud)

或者

我应该在单个命令中创建索引并给予相同的权重:

db.articles.ensureIndex(
                     {
                       title: "text",
                       abstract: "text",
                     },
                     {
                       weights: {
                                  title: 1,
                                  abstract:1,
                                },
                       name: "TextIndex"
                     }
                   )
Run Code Online (Sandbox Code Playgroud)

我已经习惯了find()这个操作,它的查询粒度是key,也就是说,你应该指明你要查询的key。但是对于文本索引,它就像一个文档粒度,你不能指明你要查询的key。想要查询,只能指定文档名称。那么,如果我想对某个特殊键进行文本搜索,该怎么办呢?

Ada*_*m C 1

所以,事实证明,不需要测试,我只是记住了关键的决定限制。您只能在集合上创建一个文本索引(请参阅此处),因此您别无选择。另外,MongoDB 一次只能使用一个索引来满足查询(直到 2.6 中引入索引交集)。

因此,唯一可行的选择是按照您的概述创建复合索引,在两个字段上作为单个索引:

db.articles.ensureIndex(
                     {
                       title: "text",
                       abstract: "text",
                     },
                     {
                       weights: {
                                  title: 1,
                                  abstract:1,
                                },
                       name: "TextIndex"
                     }
                   )
Run Code Online (Sandbox Code Playgroud)

对于 3 或 4 个字段也是如此,您首先必须删除现有索引,然后创建新索引并包含 3/4/其他。