Mongodb索引:'键太大而不能索引'

时间:2015-10-27 21:10:31

标签: mongodb indexing database

我有一个数据集,其架构如下:

{..., "url":"www.google.com", "time::143703672, "geo":"US-NJ", ...}

我希望搜索文档:(我正在使用pymongo)

data.find({'url':url, 'geo':user_geo, 'time':{"$gt": userlog_gmt_time - 10, "$lt": userlog_gmt_time + 10}})

我试图建立一个复合索引:

db.AdxRevenueData_Jul.createIndex({url:1, geo:1, time:1})

但是,我收到错误“密钥太长而无法索引”。原因是一些网址非常长。我相信数据集中有一些“错误”的网址。

然后,我尝试仅基于'geo'和'time'构建复合索引。我以为我可以迭代返回结果并找到带有url的文档。但是,这种方法太慢了......

有人建议我设置参数以跳过那些长网址。

sudo mongod --setParameter failIndexKeyTooLong=false

但是,我不确定所有长网都是错的。我不想跳过很多文件。

我的问题是,除了更改数据库之外,还有其他解决方案吗?

例如,我应该使用“text”索引吗?它会起作用吗?

db.AdxRevenueData_Jul.createIndex({url:'text', geo:1, time:1})

或者, 我是否应该另外将url构建为“哈希”单个索引?可以妥协吗?

db.AdxRevenueData_Jul.createIndex({url:'hashed'})
db.AdxRevenueData_Jul.createIndex({geo:1, time:1})

1 个答案:

答案 0 :(得分:0)

使用文本索引对那里没有帮助。 我建议在此字段中使用散列索引。