【问题标题】:MongoDB - Categorical text indexMongoDB - 分类文本索引
【发布时间】:2015-08-08 07:03:15
【问题描述】:

创建索引时,如果文本字段是分类的,这对 MongoDB 有影响吗?也就是说,索引是文本,但只能支持有限的一组值。

例如

{
  v_ :
      { g_e : 'VH1' }
},

{
  v_ :
      { g_e : 'VH2' }
}

目前我只是在做,

db.coll.createIndex({'v_.g_e':1})

但我知道这个索引只能接受大约 60 个文本值。 mongo 能解决这个问题,还是有更有效的方法来索引它?

【问题讨论】:

    标签: mongodb indexing


    【解决方案1】:

    您可以根据需要将任意数量的单词放入文本索引中。 您必须问自己是否要对放入文本索引的字段进行全文搜索(每个集合只能有一个)。

    如果您不需要全文搜索并且只将有限的一组值与索引文档进行比较,那么您已经做对了,因为您不想按文档的不同字段进行排序。在这种情况下,您必须将该字段放入索引中(顺序很重要!):

    db.collection.createIndex({"v_.g_e":1,"fieldToSortBy":1})
    

    【讨论】:

    • 对于订单问题,如果我有一个包含 6 个字段的复合索引,并且只查询其中的五个(但按照它们列出的顺序,没有我没有包括的那个),确实它会减慢查询速度吗?或者我应该创建一个只有五个字段的索引
    • @jwillis0720 即使只使用了一些索引字段,MongoDB 也可以并且将使用复合索引。但是,具有六个字段的复合索引听起来有点像可能存在建模问题。为排序索引字段,例如,当查询部分已经将文档减少到几个和/或文档作为一个整体返回时,通常会浪费宝贵的 RAM。
    • 但是,只有五个字段的新复合索引会更快吗?这就是我要问的。
    • @jwillis 呃,那应该怎么样?
    • 如果我有六个字段的复合索引,并且只查询五个字段,它将使用索引。但是,如果我只使用我查询的五个字段创建另一个复合索引,它会更快吗,因为它将使用五个成员索引而不是六个成员。
    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 2019-06-03
    • 2015-11-08
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多