Я пытаюсь сгенерировать индекс mongodb для текстовых значений для следующих ключей: CVE_data_meta
, vendor_name
и product_name
.Значения являются частью массивов.
Мой код выглядит следующим образом:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}).then(() => {
db.close();
Проблема, с которой я сталкиваюсь - 'namespace name generated from index name "vulndbapi.nvd.$cve.affects.vendor.vendor_data.vendor_name_text_cve.affects.vendor.vendor_data.product.product_data.product_name_text_cve.CVE_data_meta.ID_text" is too long (127 byte max)'
.Кроме того, если я просто попытаюсь выполнить индексирование по идентификатору CVE, поисковый запрос будет пустым.
Образец набора данных.Фактический набор данных намного больше.
{
"cve": {
"data_type": "CVE",
"data_format": "MITRE",
"data_version": "4.0",
"CVE_data_meta": {
"ID": "CVE-2012-0001",
"ASSIGNER": "cve@mitre.org"
},
"affects": {
"vendor": {
"vendor_data": [{
"vendor_name": "microsoft",
"product": {
"product_data": [{
"product_name": "windows_7",
"version": {
"version_data": [{
"version_value": "-",
"version_affected": "="
}]
}
},
{
"product_name": "windows_server_2003",
"version": {
"version_data": [{
"version_value": "*",
"version_affected": "="
}]
}
}
]
}
}]
}
}
}
}
Мой код запроса:
col.find({
$text: {
$search: 'CVE-2012-0001'
// $search: 'firefox'
}
}).then((resolve) => {
console.log(resolve);
db.close();
Как я могу генерировать индексы, когда значение является частью массива, и индексировать все элементы этого массива?Окончательная коллекция превысит 50 тыс. Предметов