Максимальный размер вектора для свойств в Windows Search
Я достиг предела при индексации файлов PDF в Windows Search, в частности размера массива свойства System.Keywords. Все отлично работает до 20 тегов, но все остальные теги не включаются в индекс.
Моим первым инстинктом было посмотреть, что захватывает фильтр IFilter, и с помощью фильтрующего файла.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 использует произведение размера файла и MaxGrowFactor (размер файла N * MaxGrowFactor), считанный из реестра в HKEY_LOCAL_MACHINE-> Программное обеспечение->Microsoft-> Поиск Windows-> Менеджер сбора->MaxGrowFactor. MaxGrowFactor по умолчанию - четыре (4). Следовательно, если ваш тип файла имеет тенденцию быть небольшим по общему размеру, но иметь большие свойства, Windows Search может не принять все данные свойств, которые вы хотите передать. Тем не менее, вы можете увеличить MaxGrowFactor в соответствии с вашими потребностями.
Однако мне не ясно, влияет ли это на размер массива. Я предполагаю, что это усечение происходит в компоненте Gatherer поиска Windows, поэтому мне интересно, есть ли какие-либо настройки реестра.
Я посмотрел на базу данных Windows Search (Windows.edb) с помощью утилиты ESE Database View и по схеме увидел, что тип столбца - большой двоичный тип, поэтому здесь не должно быть никаких ограничений. Глядя на необработанное значение, я мог видеть байты для значений тега (разделенных символами NUL) и заканчиваться символом @. Но было только 20 значений, а не 21, подтверждающих ограничение.
Я достиг конца моего исследования, но я все еще не продвинулся дальше. Можно ли расширить размер массива для System.Keywords или это жестко заданное ограничение в компоненте Gatherer? Любая помощь будет высоко ценится, спасибо заранее!