zoukankan      html  css  js  c++  java
  • Lucene6.6添加索引数据时字符个数超限,字符数不能超过BYTE_BLOCK_SIZE=32766

      最近发现Lucene6.6版本添加索引数据字符数超过32766时,出现报错,而Lucene4.6版本中则未出现这一问题,原因如下:

    概述:

            添加索引数据时,对于分词字段,分词后的Term会和BYTE_BLOCK_SIZE比较,若该Term超过BYTE_BLOCK_SIZE,则视为超长Term,不添加到索引中,4.6为了兼容性没有捕捉异常,6.6版本捕捉了该异常。对于不分词字段,则把整个字段值作为一个Term和BYTE_BLOCK_SIZE比较。

    详述如下:

    (1)分词字段:(设定的最大字符数300万)

    对于4.6和6.6的中文字段类型,整个字符串会被分割成比较小的Term,因此不会出现问题。对于添加字段值为一连串的英文字母如:”abcmasdasdlasdasdasds...” 这种字符串不会被分词器分割,所以当字符数量超过 32766 时,就会出现问题。4.6版本为了兼容性,没有对这部分异常进行捕捉。源码中注释如下:

    // Not enough room in current block

    // Just skip this term, to remain as robust as

    // possible during indexing.  

    6.6版本捕捉了这部分异常。所以报错。针对实际应用场景,不会出现这种连续的英文字符,所以该问题可以忽略。

     

    (2)不分词字段:(设定的最大字符数30万)

    对于4.6和6.6的中文或者英文字段类型,整个字符串都不会被分割成比较小的Term,因此当字符数超过32766 都会出现问题。同样4.6跳过异常,6.6对该问题进行了捕捉。所以该问题在4.6版本未被发现。

     

    解决方案:不分词字段最大字符数设置为32760,当字符数超过此值,直接返回错误码。

    三年程序员,专注语音文本分析、大数据挖掘、预训练模型及知识图谱相关技术的探索
  • 相关阅读:
    小波变换的引入,通俗易懂
    Leetcode 437. Path Sum III
    Leetcode 113. Path Sum II
    Leetcode 112 Path Sum
    Leetcode 520 Detect Capital
    Leetcode 443 String Compression
    Leetcode 38 Count and Say
    python中的生成器(generator)总结
    python的random模块及加权随机算法的python实现
    leetcode 24. Swap Nodes in Pairs(链表)
  • 原文地址:https://www.cnblogs.com/jetHu/p/8488977.html
Copyright © 2011-2022 走看看