我有一个数据集,其架构如下:
{..., "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})
答案 0 :(得分:0)
使用文本索引对那里没有帮助。 我建议在此字段中使用散列索引。