Я достиг предела при индексации файлов 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?Любая помощь будет признательна, спасибо заранее!