ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pymongo创建hash和text索引

2020-04-24 19:03:20  阅读:318  来源: 互联网

标签:index hash description text 索引 user pymongo


来源于

 

不止于python

 

报错中.......

在使用pymongo创建基础索引, 出现以下错误

pymongo.errors.OperationFailure: WiredTigerIndex::insert: key too large to index, failing

 

代码如下:

import pymongo
​
user_col = pymongo.MongoClient()["test"]["t"]
user_col.create_index("description")
user_col.insert_one({"age": 18, "description": "tests"*260})

 

google原因.......

这个是因为在MongoDB中,从2.6开始,索引项的总大小(根据BSON类型可能包括结构开销)必须小于1024字节。
就是要建立的索引字段的值特别大, 超过了1024字节, 对于比较大的值建立索引, 建立的索引也会非常大, 效率也会很慢, 占用更大的RAM空间, 所以不建议对较大的创建普通索引


关于mongo官方文档关于index key的限制

 

解决中......

最简单方法

最简单也是最难的方法:

想办法减少字段值的大小, 不超过1024字节

改变mongo配置

选择其一即可

1. 使用以下命令启动mongod

mongod --setParameter failIndexKeyTooLong=false


2. 在mongo中执行

db.getSiblingDB('admin').runCommand( { setParameter: 1, failIndexKeyTooLong: false } )

 

创建hash索引

建立hash索引

创建hash索引官方文档

Collection.create_index([("description", pymongo.HASHED)])


例:将创建索引改为

user_col.create_index([("description", pymongo.HASHED)])


进入mongo, 查看索引如下

> use test
switched to db test
> db.user.getIndexes()
[
    {
        "v": 2,
        "key": {
            "_id": 1
        },
        "name": "_id_",
        "ns": "test.user"
    },
    {
        "v": 2,
        "key": {
            "description": "hashed"
        },
        "name": "description_hashed",
        "ns": "test.user"
    }
]

 

创建text索引

注意 : text索引一个集合只能创建一个, 再次创建会报错

创建text索引官方文档

Collection.create_index([("description", pymongo.TEXT)])

 

只需要将pymongo.HASHED 改为 pymongo.TEXT 就可以了

user_col.create_index([("description", pymongo.TEXT)])


再次查看db.user.getIndexes(), 会多出一个text索引:

{
    "v": 2,
    "key": {
        "_fts": "text",
        "_ftsx": 1
    },
    "name": "description_text",
    "ns": "test.user",
    "weights": {
        "description": 1
    },
    "default_language": "english",
    "language_override": "language",
    "textIndexVersion": 3
}

 

到这里这个错误就被愉快的解决了, 有问题欢迎留言哦!

 

标签:index,hash,description,text,索引,user,pymongo
来源: https://www.cnblogs.com/mswei/p/12769441.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有