Enterprise Vault™ 使用 Veritas Information Classifier 进行分类

Last Published:
Product(s): Enterprise Vault (14.4)
  1. 关于本指南
    1. 指南简介
      1.  
        Veritas 信息分类器与其他分类方法之间的关系
    2.  
      本指南的内容
    3. 从何处获取有关 Enterprise Vault 的详细信息
      1.  
        Enterprise Vault 培训模块
  2. 准备 Enterprise Vault 进行分类
    1.  
      关于准备步骤
    2.  
      用户需求
    3.  
      检查 Enterprise Vault 存储服务器上的高速缓存位置
    4.  
      设置数据访问帐户
    5.  
      在所有 Enterprise Vault 服务器上启用 Veritas 信息分类器
    6.  
      配置 Veritas 信息分类器以实现安全客户端连接
  3. 设置 Veritas Information Classifier 策略
    1.  
      Veritas 简介
    2.  
      打开 Veritas 信息分类器
    3.  
      寻找解决办法
    4.  
      分析内容取样,查找策略匹配项
    5. 关于策略
      1.  
        创建策略
      2.  
        关于策略条件
      3.  
        启用或禁用策略
      4.  
        导出或导入策略
      5.  
        重置策略
      6.  
        删除策略
    6. 关于模式
      1.  
        创建或编辑模式
      2.  
        导出或导入模式
      3.  
        删除模式
    7. 关于标记
      1.  
        创建或编辑标记
      2.  
        导出或导入标签
      3.  
        关于 Enterprise Vault 索引属性
      4.  
        分类属性值与保留类别的交互方式
      5.  
        设置保留类别注意事项
      6.  
        删除标记
    8. 关于情绪分析
      1.  
        关于情绪条件
      2.  
        在站点级别强制执行情绪分析
  4. 定义和应用 Enterprise Vault 分类策略
    1.  
      关于 Enterprise Vault 分类策略
    2. 定义分类策略
      1.  
        配置分类策略以分配持续时间最短的保留类别
    3.  
      关于与分类策略一起使用的 PowerShell cmdlet
    4.  
      将分类策略与保留计划关联
    5.  
      关于与保留计划一起使用的 PowerShell cmdlet
    6.  
      将保留计划应用于 Enterprise Vault 归档
  5. 在测试模式中运行分类
    1.  
      关于分类测试模式
    2.  
      实施分类测试模式
    3.  
      关于测试模式中运行分类所使用的 PowerShell cmdlet
    4.  
      了解分类测试模式报告
  6. 将分类与智能分区配合使用
    1.  
      关于智能分区
    2.  
      Enterprise Vault 如何确定是否将项目归档到智能分区
    3.  
      设置智能分区
    4.  
      验证 Enterprise Vault 是否已将项目归档到智能分区
  7. 附录 A. 用于自定义字段搜索的 Enterprise Vault 属性
    1.  
      关于 Enterprise Vault 属性
    2.  
      系统属性
    3.  
      附件属性
    4.  
      自定义的 Enterprise Vault 属性
    5.  
      文件系统归档项目的自定义 Enterprise Vault 属性
    6.  
      SharePoint 项目的自定义 Enterprise Vault 属性
    7.  
      Compliance Accelerator 处理的项目的自定义 Enterprise Vault 属性
    8.  
      用于策略管理软件的自定义属性
    9.  
      Enterprise Vault SMTP 归档的自定义属性
  8. 附录 B. 用于分类的 PowerShell cmdlet
    1.  
      关于分类 cmdlet
    2.  
      Disable-EVClassification
    3.  
      Get-EVClassificationPolicy
    4.  
      Get-EVClassificationStatus
    5.  
      Get-EVClassificationTestMode
    6.  
      Get-EVClassificationVICTags
    7.  
      Initialize-EVClassificationVIC
    8.  
      Set-EVClassificationVICFIPSMode
    9.  
      New-EVClassificationPolicy
    10.  
      Remove-EVClassificationPolicy
    11.  
      Set-EVClassificationPolicy
    12.  
      Set-EVClassificationTestMode
  9. 附录 C. 分类缓存文件夹
    1.  
      Enterprise Vault 对其提交以进行分类的项目的缓存方式
    2.  
      针对分类文件大小的限制
    3.  
      配置 Enterprise Vault 以便将分类文件保留在高速缓存文件夹中
  10. 附录 D. 从 FCI 分类迁移到 Veritas Information Classifier
    1.  
      转换 FCI 分类规则以用于 Veritas 信息分类器
  11. 附录 E. 监视和故障排除
    1.  
      审核
    2.  
      检查分类性能计数器
    3.  
      分类故障排除
    4.  
      在归档中搜索 Veritas 信息分类器已分类的项目
    5.  
      语言检测故障排除

关于策略条件

条件是指 Veritas 将某项目视为匹配项时该项目必须满足的条件。策略可以包含任意数量的条件。

条件的基本组成部分

所有条件的基本形式如下:

属性运算符值

例如,在以下条件中,“Content”是属性,“contains text”是运算符,“Stocks”是值:

Example of a Veritas  condition

属性指定要评估的项目的一部分或特征:内容、标题、修改日期、文件大小,等等。从列表中选择一个属性时,另外两个字段中的选项将会相应更改。例如,如果选择“修改日期”属性,其他字段将提供可用于设置一个或多个日期的选项。对于“Content”等属性,可用的运算符如下:

  • contains text

  • matches regex

  • matches pattern

  • is similar to

  • contains exact data match in

  • language is

  • contains entity

  • sentiment score

在每个条件的右侧,可以指定项目满足条件所需的最小次数,满足条件后 Veritas 才会将项目视为匹配项。

自定义字段

在组织中使用的各种应用程序可能会向您要进行分类的项目添加自定义属性信息。例如,当 Enterprise Vault 处理项目时,它将在项目的许多元数据属性中填充信息,并随已归档项目一起存储这些信息:Enterprise Vault 归档项目的日期和项目具有的附件数等。

如果您知道特别需要的属性的名称,则可以在策略条件中输入名称作为自定义字段。

Custom fields in policy conditions

使用自定义属性字段创建新属性

创建策略时,如果属性列表中没有所需的属性,则可以使用自定义属性字段创建新属性。

要创建新属性,请在创建或编辑策略时使用自定义属性字段,如下所示:

  1. 根据创建策略主题中提供的步骤设置其他字段。
  2. 在 Conditions 部分下,从 Property 下拉列表中选择所需的自定义属性字段:Custom date 字段、Custom number 字段或 Custom string 字段。
  3. 指定新自定义属性的名称。

    注意:

    自定义属性名称必须与文本提取引擎(例如 Apache TIKA)识别的元数据属性名称相同。对于 Veritas Enterprise Vault,自定义属性名称必须与其中一个索引属性匹配。

  4. 完成其余步骤以创建策略。

    新策略是使用新的自定义属性创建的。

使用 YAML 配置文件创建新属性

使用 Veritas 的 YAML 文件在 UI 的属性列表下添加自定义属性。

YAML 文件的 metadataDefinitions 部分列出了属性列表中的所有现有属性,如下所示:

下表显示了现有属性的数据结构:

属性项目

描述

name

指定文本提取程序引擎(如 Apache TIKA)识别的元数据属性。

对于 Veritas Enterprise Vault,请指定捕获的索引属性。

displayName

UI 的属性列表中显示的属性名称,例如“Title”。

type

关联的属性类型,例如字符串、日期时间或数字。

aliases

指定要映射到 displayName 的其他元数据属性。

在 UI 中的策略条件页面下提供此属性

  1. 将上表中所示的新属性详细信息添加到 YAML 中的 metadataDefinitions 部分。
  2. 重新启动相应应用程序的 Veritas 服务。
文本匹配

设置条件以便在提交分类的项目中查找特定词汇或短语时,请遵循以下准则:

  • 如果在条件中放置多个词汇或短语并且把每一个放置在单独一行上,将可以查找多个词汇或短语。项目仅需包含列表中的一个词汇或短语即满足条件。

  • 选择 Match Case 将仅在指定词汇或短语中查找大写和小写字母均完全匹配的项。

  • 选择 String Match 将查找指定词汇或短语包含在其他词汇或短语内的实例。例如,如果选择此选项,则词语 enter 匹配 entersentertainmentcarpenter。如果清除该选项,则 enter 仅匹配 enter

    同样地,如果选择 String Match,则短语 call me 匹配 call mediarecall meeting,但不匹配 surgically mend

  • 您可以在同一行中的两个词语之间放置近似运算符 NEAR 和 BEFORE。例如,tax NEAR/10 reform 匹配 taxreform 之间不超过十个词语的实例。sales BEFORE/5 report 匹配 sales 位于 report 之前、且它们之间不超过 5 个单词的实例。对于这两种情况,均需输入数字。

    注意:

    评估格式化数据(例如,表和电子表格)时,这些邻近运算符可能无法按预期运行。数据分类之前执行的转换过程可以交换表单元格的顺序。例如,假设电子表格在一个单元格中包含词语 sales,紧靠该单元格右侧的单元格中包含 report。这应匹配运算符 sales BEFORE/5 report,但转换电子表格后可能无法执行此操作,因为转换过程已变换这两个词的顺序。

  • 词汇和短语可以包含星号 (*) 和问号 (?) 通配符。作为词汇的一部分,星号匹配零个或多个字符。就其本身而言,星号与一个词汇完全匹配。问号与一个字符完全匹配。例如:

    • stock* 匹配 stockstocksstockings

    • *ock 匹配 stockclock

    • *ock* 匹配 stockclocks

    • ??ock 匹配 stockclock,但不匹配 dock

    • sell * stock 匹配 sell the stocksell some stock,但不匹配 sell stock

    可以将通配符与 NEAR 和 BEFORE 运算符结合使用。例如:

    • s?l? BEFORE/1 stock* 匹配 sold the stocksell stockssale of stockings

  • 如果要在评估策略条件时排除特定词汇或短语,请选择 Exclude Match

    选择此选项以及 inclusion terms 时,还可以定义想要从匹配条件中排除的词。

    例如,假设某文档包含示例文本“Admin: There is a spoofing activity detected. Bob: Can you help me locate a spoofed account for spoofed email account?”。您只想匹配“spoof, spoofed, spoofing”等词,希望避免或排除“spoofed email account, an email spoof”等词。在这种情况下,可以在 inclusion terms 字段中提供关键字“spoof, spoofed, spoofing”,并在 exclusion terms 字段中提供“spoofed email account, an email spoof”等词,如下图示例中所示。

    排除策略条件的限制

    • 此字段只能按关键字进行排除。也就是说,exclusion terms 的输入字段仅接受关键字,而不接受正则表达式、模式等。

    • 按关键字排除仅适用于每个包含词都包含在排除词中的情况。

    • 如果任何基础条件具有排除项,则组无法使用组级别条件的邻近选项。

    要使用排除策略条件,

正则表达式匹配

正则表达式(缩写为 regex)是一种包含普通字符(例如,字母 a - z)和特殊字符(称为元字符)的文本模式。该模式描述在搜索文本时要匹配的一个或多个字符串。例如,以下正则表达式与所有 VISA 卡编号中的数字序列匹配:

\b4[0-9]{12}(?:[0-9]{3})?\b

您的正则表达式必须符合 Perl 正则表达式语法。

有关此语法的详细信息,请参见 Veritas 的联机帮助。

您可能会发现使用免费在线工具 (https://regex101.com) 构建并测试正则表达式非常有帮助。此工具可在您键入正则表达式时显示相关说明,还会列出正则表达式与您所选测试字符串之间的所有匹配项。默认的正则表达式样式 pcre (php) 与 Veritas 兼容。

注意:

查找正则表达式匹配项比查找特定词语或短语的匹配项慢很多。您可以查找这两种类型的匹配项彼此邻近的实例,进而显著提高性能和准确性。为此,请设置 All of 条件组,其中包含正则表达式条件和用于查找特定词语和短语的 contains text 条件,并指定匹配项应出现的必需距离。Veritas 首先评估 contains text 条件,然后仅查找正则表达式匹配项。

模式匹配

模式匹配根据现有的 Veritas 模式评估选定的项目属性。根据选择的模式,可以设置您愿意接受的可信度。较高的可信度可能会生成数量更少、但更相关的匹配项。

如果在测试使用内置模式的策略时没有得到预期结果,请注意下列事项:

  • 很重要的一点就是检查测试项目是否达到了模式可信度。例如,默认情况下,Credit Card Policy 将查找匹配模式“Credit/Debit Card Number”且具有中等到极高可信度的内容。要满足中等可信度要求,项目必须包含以下选项之一:

    • 带分隔符的信用卡号(数字之间包含空格或短划线的信用卡号)。

    • 不带分隔符的信用卡号和一个或多个信用卡关键字,如“AMEX”或“Visa”。

    因此,如果某个项目包含不带分隔符的信用卡号,但它也不包含信用卡关键字,则该项目不满足这些条件。

  • 单击 Show details 查看测试结果之后,Test classification results 窗口可能无法突出显示部分或全部匹配项。这是仅限某些特定模式的已知问题。Veritas 的后续版本将纠正该问题。

精确数据匹配 (Exact Data Match, EDM)

与大多数依靠模式匹配来识别敏感数据的分类技术不同,当检测到需要保护的实际数据时,精确数据匹配 (EDM) 会触发分类响应。通过精确数据匹配,可以降低误报率,从而提高自动分类的准确性。EDM 使用指纹方法,即以 CSV 或 TXT 格式提取数据库或表内容作为源文件。在邻近检测中检测到单行的一个或多个列时,将采集该表,并创建指示匹配项的规则。当需要标识表中维护的离散客户数据、员工数据和任何其他敏感数据存储库时,EDM 是一个理想选择。

使用精确数据匹配对信息进行分类

  • 通过设置配置选项并提供源文档(通常包含从数据库等数据存储导出的所需字段),可创建 EDM 模式。请参见“创建基于精确数据匹配的模式”

  • 在要用于基于 EDM 的分类的任何策略中使用生成的 EDM 模式。

可以使用 YAML 启用或禁用精确数据匹配。

通过精确数据匹配功能,可以从数据库中检测特定的数据集。例如,员工记录。可以根据配置的邻近值匹配一个或多个字段和可选字段。它支持所有语言的大型数据集(如数据库记录)和文本,并通过对存储的数据进行哈希处理来提供数据保护。使用精确数据匹配的主要好处是,通过精确匹配数据(与基于模式的匹配不同)来减少误报。

例如,如果要分类的文档中包含以下内容:

姓名:Teresa M. Brown

员工 ID:624828

并且您尝试与以下 EDM 源文档匹配,

则这将触发匹配。

精确数据匹配具有以下优点:

  • 能够检测数据库中的特定数据集。例如,员工记录。

  • 支持数据组合的匹配。例如,根据配置的邻近值匹配一个或多个字段和可选字段。

  • 支持大型数据集,如数据库记录。

  • 通过对存储的数据进行哈希处理来提供数据保护。

  • 自动同步远程分类服务器上的精确数据匹配规则包(分类需要此规则包)。不需要手动干预。

  • 支持对精确数据匹配规则包文件进行文件加密,其机制类似于特定于租户的模式、策略和标记。

  • 配置策略时,对于精确数据匹配类型策略条件,支持最小值/最大值处置。

  • 支持所有语言的文本。

使用精确数据匹配模式创建策略

  1. 按照前面所述的初始步骤来创建或编辑策略。
  2. 在运算符列表框中,选择 contains exact data match in,然后从旁边的值列表框中选择所需的精确数据匹配模式。

    注意:

    配置策略时,对于精确数据匹配类型策略条件,在 Conditions 下,添加了最小值/最大值处置支持。可以为关键字匹配指定精确计数或更大计数。选择大于 1 的值时,将显示 Exclude repeats 复选框。如果选中此复选框,则匹配项彼此不同。

    例如,最小计数为 2 的信用卡条件要求在单个文档中使用两张不同的信用卡。

  3. 单击 Save

使用基于 EDM 的策略测试文档时,Veritas 将显示结果。此外,匹配行的第一列将突出显示。

示例 1:

如果源文档内容如下所示:

精确数据匹配选项如下所示:

名称

First row contains column headers

Yes

Column delimiter

,

Perform hashing to secure data fields

No

Use case-sensitive matching

No

Proximity for matches

200

Minimum columns to match

2

All columns

Not selected

并且如果测试文档内容如下所示:

分类结果将显示 Stuart 和 James 这两个记录的匹配项。

示例 2:

对于前面示例中所述的相同源文档和测试文档,如果将“最小列数”值设置为 3,如下所示:

名称

First row contains column headers

Yes

Column delimiter

,

Perform hashing to secure data fields

No

Use case-sensitive matching

No

Proximity for matches

200

Minimum columns to match

3

All columns

Not selected

分类结果将显示一个记录(即 Stuart)的匹配项。因为第一条记录中的所有 3 个字段都存在于测试文档中。

示例 3:

对于第一个示例中所述的相同源文档和测试文档,如果邻近值设置为 50,如下所示:

名称

First row contains column headers

Yes

Column delimiter

,

Perform hashing to secure data fields

No

Use case-sensitive matching

No

Proximity for matches

50

Minimum columns to match

3

All columns

Not selected

在这种情况下,所需的词不在 50 个字符的邻近范围内。因此,结果将不显示匹配项。

基于精确数据匹配的策略的分类性能取决于以下因素。

  • 要匹配的记录数

  • 字段数和字段大小

  • 要分类的数据

  • 匹配项数

  • 发现的邻近值和列匹配项

  • 计算硬件和可用资源

语言匹配

可以设置条件,以将策略匹配限制为特定语言的项目。例如,设置如下所示的条件来查找内容主要是法语的项目:

Language search in Veritas

语言列表中的其中一个选项是 Multiple languages detected。此选项匹配至少包含两种语言的项目。

要防止 Veritas 因无法确定项目的主要语言而将其忽略,请选择 Or Primary Language Unknown。Veritas 无法确定项目主要语言的最常见原因是项目包含的内容量太少。

实体匹配

可以设置条件,将策略匹配限制为包含人员名称或位置的内容。

注意:

只有在运行 Veritas 应用程序时使用了 nlp-service-0.1.6.jar,“contains entity”条件才可用。此外,命名实体识别 (NER) 仅适用于英语。

例如,设置如下条件来查找包含人名的内容。

Entity search in Veritas Information

注意:

与普通分类相比,命名实体识别 (NER) 占用的时间和资源更多。NER 不适用于大型文档,尤其是大于 10 MB 的文档。

分类的风险评分和风险级别信息

每个已分类项目的风险评分和风险级别均会发送到使用风险评分和风险级别信息的应用程序。使用风险评分和风险级别信息的应用程序可以分析此信息,并支持按风险评分和/或风险级别对项目进行排序、过滤、搜索和报告等功能。通过了解风险级别,可以优化数据管理、审阅和控制方面的工作。可以优先安排风险最高的项目的活动和资源。

风险评分和风险级别基于模式或策略条件匹配结果的数量。匹配结果较多的项目将归类为高风险项目。匹配结果较少的项目将归类为低风险项目。

通过 YAML 文件配置风险级别设置

在 YAML 文件中,已弃用以前使用的 lowerRiskRuleNameParts 参数,并添加了三个新参数 - lowRiskUpperLimitmediumRiskUpperLimithighRiskUpperLimit 。这些参数根据风险评分值提供对不同风险级别定义的控制。此配置为低、中和高风险级别定义风险评分范围的上限。

  • lowRiskUpperLimit - 它可以为零或大于零。默认情况下,它设置为 2。

  • mediumRiskUpperLimit - 它可以是任何非零正整数。但是必须大于 lowRiskUpperLimit 值。默认情况下,它设置为 5。

  • highRiskUpperLimit - 它可以是任何非零正整数。但是必须大于 mediumRiskUpperLimit 值。默认情况下,它设置为 10。

此设置为低、中和高风险级别定义风险评分范围的上限。

条件

风险级别

风险评分 > highRiskUpperLimit

非常高

highRiskUpperLimit >= 风险评分 > mediumRiskUpperLimit

mediumRiskUpperLimit >= 风险评分 > lowRiskUpperLimit

中等

lowRiskUpperLimit >= 风险评分 >= 1

风险评分 = 0

无风险

分类 API 响应中的风险评分和风险级别信息

仅当满足以下条件时,才会将风险信息作为分类响应的一部分发送:

  • matchDetailLevel 在分类请求中配置为 LOW/MEDIUM/HIGH

  • 根据 YAML 文件中的风险评分和风险级别限制设置,该项目必须具有一些风险。

风险评分计算

潜在敏感内容的风险计算基于模式或策略条件的匹配结果数量多少的程度以及策略风险权重。

注意:

默认情况下,所有自定义策略和大多数内置策略的风险权重值均配置为 1。对于订购策略和所有语言检测策略,默认情况下风险权重设置为 0。

请考虑以下示例。文档具有以下分类结果。

策略

分类结果

策略名称

模式名称(匹配计数)

风险权重

Policy-1

Pattern-A (2), Pattern-B (3)

2

Policy-2

Pattern-B (2), Pattern-C (1)

0

Policy-3

Pattern-C (3), Pattern D (5)

1

Policy-4

Pattern-C (1), Pattern E (1)

5

唯一策略匹配表

下表介绍了风险评分计算的示例情形。

模式名称

匹配计数

匹配的策略

风险权重

Pattern-A

2

Policy-1

2

Pattern-B

3

Policy-1

2

Pattern-C

3

Policy-3

1

Pattern-D

5

Policy-3

1

Pattern-E

1

Policy-4

5

要计算风险评分,如果在多个策略中存在项目模式匹配,则会考虑风险权重最高的策略,如唯一策略匹配表中所示。

风险评分的计算方法为:每个策略匹配的匹配计数乘以风险权重之后再将结果相加。以下步骤介绍了风险评分计算的分步操作。

步骤 1:将匹配计数与风险级别相乘。

步骤 2:对唯一规则匹配表中的所有行重复步骤 1。

步骤 3:将步骤 2 的结果相加。

风险评分 = 2*2 + 3*2 + 3*1 + 5*1 + 1*5

= 4 + 6 + 3 + 5 + 5

= 23

风险级别

根据风险评分将风险分为不同的风险级别,并在关于策略条件部分中进行了描述。

在上述示例中,风险评分为 21。因此,将该风险归类为:风险级别: 非常高

关于风险评分的事实和限制:

  • 基于情绪评分/命名实体的策略条件匹配结果不计入风险评分。

  • 由于订购策略和任何语言检测策略,这些匹配结果不计入项目总风险评分,因为默认情况下所有这些策略的风险权重为零。

  • 由于语言检测策略匹配结果,可能会从 Analyzer 概述页面和 Analyzer PDF 报告的 Most Common Sensitive Data 结果中观察到一些差异。Analyzer 概述页面的结果准确无误。

  • 以下策略条件计入风险评分。

    • 内容

    • 标题

    • 作者

    • 内容类型

    • 收件人

  • 在更高版本中,以下策略条件(属性)将开始计入风险评分:

    • 修改日期

    • 创建日期

    • 敏感度

    • 类别

    • 大小(字节)

    • 自定义日期字段

    • 自定义数字字段

    • 自定义字符串字段

条件组

您可以将一组条件组合在一起,并将组合条件嵌套在其他组合条件内。所选的组运算符将确定项目是必须满足该组中的所有条件、满足其中的部分条件还是不得满足其中的任何条件才会被视为匹配项。有下列组运算符可用:

  • All of。项目必须满足所有指定条件。

  • Any of。项目必须至少满足一个指定条件。

  • None of。项目不得满足任一指定条件。

    注意:

    您可以在 All of 组内嵌套 None of 组以查找特定条件匹配项,同时排除其他条件匹配项。例如,要获得 (condition X AND condition Y) BUT NOT condition Z 效果,请在 All of 组中包括 X 和 Y 条件,在嵌套的 None of 组中包括 Z 条件。

  • n or more of。项目必须满足指定数量的条件。

只有对于 All of 组,才能选择查找条件出现在彼此的指定字符数内的实例。例如,以下条件组查找词汇 Goodbye 出现在词汇 Hello 的 20 个字符内的实例:

Proximity search in Veritas

对于测试字符串“You say Goodbye and I say Hello”,由于 Hello 的第一个字符与 Goodbye 的第一个字符之间少于 20 个字符,因此匹配这些条件。同样地,字符串“You say Hello and I say Goodbye”也匹配,因为其中这两个词汇的结尾之间少于 20 个字符。在每种情况下,空格均计为字符。

注意:

执行 within nn characters 邻近搜索时,注意不要在多个条件之间重复相同的搜索词。例如,假设您定义了一个条件来查找姓名 FredSueBob,并定义了第二个条件来查找 JoeBobSarah。包含单个 Bob 实例的项目将与这两个条件都匹配。

您可以不选择 from the first condition 选项,而选择 in a sliding window。此选项查找条件出现在指定数字的任意字符序列内的实例。例如,查找词汇 Goodbye 出现在词汇 Hello 的 20 个字符滑动窗口内的条件组不匹配“You say Goodbye and I say Hello”,因为词汇 Goodbye 的开头与词汇 Hello 的结尾之间有 23 个字符。

Sliding window example