Windows搜索中属性的最大矢量大小

时间:2018-10-09 22:04:44

标签: winapi com windows-search ifilter wds

在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组件中发生的,所以我想知道是否涉及任何注册表设置。

enter image description here

首先,我确实使用ESE Database View实用程序查看了Windows搜索数据库(Windows.edb),从架构中我可以看到列类型是大二进制类型,因此那里不应有任何限制。查看原始值,我可以看到标签值的字节(由NUL字符分隔),并以@字符终止。但是只有20个值而不是21个确认极限。

我已经走到研究的尽头,但我仍然走得更远。是否可以扩展System.Keywords的数组大小,或者它是Gatherer组件中的硬编码限制?任何帮助将不胜感激,在此先感谢!

0 个答案:

没有答案