zoukankan      html  css  js  c++  java
  • pymongo创建hash和text索引

    来源于

    不止于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
    }

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

  • 相关阅读:
    Eclipse配置Maven详细教程
    Spring MVC 搭建web项目示例
    C# Action 和Func
    C# params 用法简介
    WPF绘图性能问题
    C# EventWaitHandle用法
    C#5.0 异步编程async/await用法
    通过Struts2Web应用框架深入理解MVC
    Java过滤器—Filter用法简介
    WPF内嵌CEF控件,与JS交互
  • 原文地址:https://www.cnblogs.com/mswei/p/12769441.html
Copyright © 2011-2022 走看看