在Windows Search中为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的文档,没有提及最大尺寸或项目限制。
再次查看documentation,其中提到了maxSize属性:
可选。指示属性值允许的最大大小 存储在Windows搜索数据库中。此限制适用于 向量的单个元素,而不是整个向量。价值观 超出此大小将被截断。默认值为“ 128”(字节)。 当前,Windows搜索在计算时不使用maxSize 它从文件接受的数据量。而是限制Windows 搜索使用是文件大小与 从注册表中读取的MaxGrowFactor(文件大小N * MaxGrowFactor) HKEY_LOCAL_MACHINE->软件-> Microsoft-> Windows搜索->收集 管理员-> MaxGrowFactor。默认的MaxGrowFactor为四(4)。 因此,如果您的文件类型总大小较小,但 具有较大的属性,Windows搜索可能不接受所有属性 您要发出的数据。但是,您可以将MaxGrowFactor增加到 满足您的需求。
但是,我不清楚这是否影响数组的大小。我猜想这种截断是在Windows搜索的Gatherer组件中发生的,所以我想知道是否涉及任何注册表设置。
首先,我确实使用ESE Database View实用程序查看了Windows搜索数据库(Windows.edb),从架构中我可以看到列类型是大二进制类型,因此那里不应有任何限制。查看原始值,我可以看到标签值的字节(由NUL字符分隔),并以@字符终止。但是只有20个值而不是21个确认极限。
我已经走到研究的尽头,但我仍然走得更远。是否可以扩展System.Keywords的数组大小,或者它是Gatherer组件中的硬编码限制?任何帮助将不胜感激,在此先感谢!