Winapi Windows搜索中属性的最大向量大小
我在Windows Search中索引PDF文件时遇到了一个限制,特别是System.Keywords属性的数组大小。在多达20个标记的情况下,一切正常,但索引中不包括任何其他标记 我的第一反应是查看IFilter捕获了什么,并使用filtdump.exe获得了以下输出Winapi Windows搜索中属性的最大向量大小,winapi,com,windows-search,ifilter,wds,Winapi,Com,Windows Search,Ifilter,Wds,我在Windows Search中索引PDF文件时遇到了一个限制,特别是System.Keywords属性的数组大小。在多达20个标记的情况下,一切正常,但索引中不包括任何其他标记 我的第一反应是查看IFilter捕获了什么,并使用filtdump.exe获得了以下输出 CHUNK: --------------------------------------------------------------- Attribute = {F29F85E0-4FF9-1068-AB91-08
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
属性键:{F29F85E0-4FF9-1068-AB91-08002B27B3D9}5
规范名称:System.Keywords
属性类型:VT|U向量| VT|U LPWSTR
显示名称:标签
编辑邀请:添加标记
类型标志:PDTF|u MULTIPLEVALUES | PDTF|u CANGROUPBY | PDTF|u CANSTACKBY | PDTF|u ISTREEPROPERTY | PDTF|u ISSYSTEMPROPERTY |
查看标志:
默认列宽:11
显示类型:PDDT_字符串
列状态:SHCOLSTATE\u TYPE\u STR
分组范围:PDGR\U离散
相对描述类型:PDRDT\U概述
排序说明:PDSD_A_Z
排序描述标签:A在顶部/Z在顶部
聚合类型:PDAT_UNION
条件类型:PDCOT\U字符串
条件操作:COP_WORD_相等
枚举类型:0
搜索信息标志:PDSIF_ININVERTEDINDEX | PDSIF_ISCOLUMN | PDSIF_ISCOLUMNSPARSE
列索引类型:
投影字符串系统.关键字
最大尺寸:512
同时查看文档中是否没有提到物品的最大尺寸或限制
再次查看这里提到的maxSize属性:
可选。指示属性值允许的最大大小
存储在Windows搜索数据库中。此限制适用于
向量的单个元素,而不是向量的整体。价值观
超出此大小的将被截断。默认值为“128”(字节)。
当前,Windows Search在计算时不使用maxSize
它从文件接受的数据量。相反,限制窗口
Search uses是文件大小和
从注册表中读取的MaxGrowFactor(文件大小N*MaxGrowFactor)
HKEY_本地_机器->软件->微软->Windows搜索->收集
管理器->最大生长因子。默认的MaxGrowFactor为四(4)。
因此,如果您的文件类型总大小较小,但
如果属性较大,Windows Search可能不接受所有属性
要发射的数据。但是,可以将MaxGrowFactor增加到
适合你的需要
但是,我不清楚这是否会影响阵列的大小。我猜这种截断发生在Windows Search的Gatherer组件中,所以我想知道是否涉及任何注册表设置
FWIW我确实使用该实用程序查看了Windows搜索数据库(Windows.edb),我可以从模式中看到列类型是大二进制类型,因此不应该存在限制。查看原始值,我可以看到标记值的字节(由NUL字符分隔),并以@字符结尾。但只有20个数值没有确认限值
我的研究已经到了尽头,但我还没有走得更远。是否可以扩展System.Keywords的数组大小,还是Gatherer组件中的硬编码限制?任何帮助都将不胜感激,提前感谢 不幸的是,我无能为力;令人遗憾的是,Windows Search的文档记录非常糟糕。