MongoDB同一字段的多种索引

问题描述:

我可以在同一个字段上有多种类型的索引吗?它会影响性能吗?MongoDB同一字段的多种索引

例子:

db.users.createIndex({"username":"text"}) 
db.users.createIndex({"username":1}) 

是的,你可以有不同类型的单场索引。您可以创建类型索引例如text,2dsphere,hash

您不能使用稀疏和唯一选项创建相同的索引。

每一个写操作会在这种情况下

更新所有可能的类型的相关索引条目这两个指数期权有很大的不同。

当您在字符串字段上创建常规索引时,它会索引字符串中的整个值。对于单个字符串(如用户名登录),您可以完全匹配。

其他硬件上的文本索引将标记并干扰该字段的内容。因此,它会将字符串分解为单个单词或标记,并将进一步将它们缩减为其词,使得相同单词的变体将匹配(例如,“谈话”匹配“谈话”,“谈话”和“谈话”为“谈话“是所有三个词干)。对真正的文本(句子,段落等)非常有用。 文本搜索

文本搜索支持搜索集合文档中的字符串内容。 MongoDB提供$ text操作符来在查询和聚集管道中执行文本搜索。

文本搜索过程:

标记化和茎索引创建和文本命令执行期间都搜索项(多个)。 为索引字段中包含搜索词的每个文档分配一个分数。得分确定 文档与给定搜索查询的相关性。

$ text操作符可以搜索单词和短语。查询匹配完整的词干。例如,如果文档字段包含单词blueberry,则对术语“蓝色”的搜索将与该文档不匹配。然而,搜索蓝莓或蓝莓将匹配。 $正则表达式搜索可以与字符串字段上的常规索引一起使用,以提供一些模式匹配和通配符搜索。不是索引的非常有效的用户,但它会使用下列索引: 如果该字段存在索引,则MongoDB将正则表达式与索引中的值进行匹配,这可能比集合扫描更快。如果正则表达式是“前缀表达式”,则可能会发生进一步优化,这意味着所有可能的匹配都以相同的字符串开头。这允许MongoDB根据该前缀构造一个“范围”,并仅与来自该范围内索引的那些值匹配。

http://docs.mongodb.org/manual/core/index-text/

http://docs.mongodb.org/manual/reference/operator/query/regex/