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,当字符数超过此值,直接返回错误码。

    三年程序员,专注语音文本分析、大数据挖掘、预训练模型及知识图谱相关技术的探索
  • 相关阅读:
    Java switch 枚举
    (八十七)AutoLayout的简单介绍与实例
    ptime概述
    如何让大数据从发现价值到创造价值
    什么是数据分析?数据分析的6个关键步骤!
    什么是数据分析?数据分析的6个关键步骤!
    数据分析方法汇总(2)
    数据分析方法汇总(2)
    数据分析方法汇总(1)
    人工智能能力提升指导总结
  • 原文地址:https://www.cnblogs.com/jetHu/p/8488977.html
Copyright © 2011-2022 走看看