3

在 Windows 搜索中索引 PDF 文件时,我遇到了限制,特别是 System.Keywords 属性的数组大小。最多 20 个标签一切正常,但索引中不包含任何其他标签。

我的第一直觉是查看 IFilter 正在捕获什么,并使用 filtdump.exe 得到以下输出。

CHUNK: ---------------------------------------------------------------
    Attribute = {F29F85E0-4FF9-1068-AB91-08002B27B3D9}\5 (System.Keywords)
    idChunk = 3
    BreakType = 0 (No Break)
    Flags (chunkstate) =  (Value)
    Locale = 0 (0x0)
    IdChunkSource = 0
    cwcStartSource = 0
    cwcLenSource = 0

VALUE: ---------------------------------------------------------------
Type = 31 (0x1f), VT_LPWSTR
Value = "TAG1; TAG2; TAG3; TAG4; TAG5; TAG6; TAG7; TAG8; TAG9; TAG10; TAG11; TAG12; TAG13; TAG14; TAG15; TAG16; TAG17; TAG18; TAG19; TAG20; TAG21"

所以我可以看到所有的标签都被检索到了,但最终的标签被截断了。

对 System.Keywords 的属性模式进行转储,我得到以下信息:

Property Key:          {F29F85E0-4FF9-1068-AB91-08002B27B3D9} 5
Canonical Name:        System.Keywords
Property Type:         VT_VECTOR | VT_LPWSTR
Display Name:          Tags
Edit Invitation:       Add a tag
Type Flags:            PDTF_MULTIPLEVALUES | PDTF_CANGROUPBY | PDTF_CANSTACKBY | PDTF_ISTREEPROPERTY | PDTF_ISVIEWABLE | PDTF_ISSYSTEMPROPERTY
View Flags:
Default Column Width:  11
Display Type:          PDDT_STRING
Column State:          SHCOLSTATE_TYPE_STR
Grouping Range:        PDGR_DISCRETE
Relative Desc. Type:   PDRDT_GENERAL
Sort Description:      PDSD_A_Z
Sort Desc. Labels:     A on top/Z on top
Aggregation Type:      PDAT_UNION
Condition Type:        PDCOT_STRING
Condition Operation:   COP_WORD_EQUAL
Enumerated Types:      0
Search Info Flags:     PDSIF_ININVERTEDINDEX | PDSIF_ISCOLUMN | PDSIF_ISCOLUMNSPARSE
Column Index Type:     <not specified>
Projection String      System.Keywords
Max Size:              512

还查看System.Keywords的文档,没有提到最大大小或项目限制。

再次查看文档,提到了 maxSize 属性:

可选的。指示存储在 Windows 搜索数据库中的属性值允许的最大大小。此限制适用于向量的各个元素,而不是整个向量。超出此大小的值将被截断。默认值为“128”(字节)。目前,Windows Search 在计算它从文件中接受的数据量时不使用 maxSize。相反,Windows Search 使用的限制是文件大小和从注册表中读取的 MaxGrowFactor(文件大小 N * MaxGrowFactor)的乘积,位于 HKEY_LOCAL_MACHINE->Software->Microsoft->Windows Search->Gathering Manager->MaxGrowFactor。默认 MaxGrowFactor 为四 (4)。因此,如果您的文件类型的总大小往往较小但具有较大的属性,Windows Search 可能不接受您要发出的所有属性数据。但是,您可以增加 MaxGrowFactor 以满足您的需要。

但是,我不清楚这是否会影响数组的大小。我猜这种截断发生在 Windows Search 的 Gatherer 组件中,所以我想知道是否涉及任何注册表设置。

在此处输入图像描述

FWIW 我确实使用ESE 数据库视图实用程序查看了 Windows 搜索数据库 (Windows.edb),我可以从架构中看到列类型是大型二进制类型,因此那里不应该有限制。查看原始值,我可以看到标记值的字节(由 NUL 字符分隔)并以 @ 字符结尾。但是只有 20 个值而不是 21 个确认限制。

我已经完成了我的研究,但我还没有走得更远。是否可以扩展 System.Keywords 的数组大小,还是 Gatherer 组件中的硬编码限制?任何帮助将不胜感激,在此先感谢!

4

0 回答 0