Description
Для полей типа Translated text создается один поисковый индекс Search Index
Методы пересоздания индексов SimpleSearch().recreate* также создают один индекс даже при наличии двух переводов
Workaround
Необходимая роль: admin
- В качестве резервной копии текущих индексов выгрузите в JSON индексы для моделей /list/sys_search_index?condition=(table_id%3D161294276904925875)
- Создайте недостающие переводы для моделей /list/sys_translation?condition=(column_id.table_id%3D160372368007633917)
- Создайте недостающие индексы через скрипт:
const model = new SimpleRecord('sys_rmc_model');
model.selectAttributes(['sys_created_at']);
model.query();
while (model.next()) {
const rusTranslation = new SimpleRecord('sys_translation');
rusTranslation.addQuery('column_id.table_id', '160372368007633917'); // Container
rusTranslation.addQuery('language_id', '156628684306200767'); // Russian
rusTranslation.addQuery('record_id', model.sys_id);
rusTranslation.selectAttributes(['record_id', 'column_id', 'value']);
rusTranslation.query();
while (rusTranslation.next()) {
const modelCreated = new SimpleDateTime(model.sys_created_at);
modelCreated.addSeconds(-360);
const index = new SimpleRecord('sys_search_index');
index.addQuery('record_id', rusTranslation.record_id);
index.addQuery('column_id', rusTranslation.getValue('column_id'));
index.addQuery('sys_id', '>', `${String(modelCreated.getNumericValue())}00000000`);
index.setLimit(1);
index.query();
index.next();
if (index.text === rusTranslation.value) {
continue;
}
const quickImportIndex = {
"sys_search_index": [
{
"record_id": rusTranslation.record_id,
"column_id": rusTranslation.getValue('column_id'),
"text": rusTranslation.value,
"table_id": model.sys_db_table_id
}
]
}
if (index.sys_id) {
quickImportIndex['sys_search_index'][0]['sys_id'] = index.sys_id;
}
importRightIndex(JSON.stringify(quickImportIndex));
}
}
function importRightIndex(data) {
const simpleInstanceUri = ss.getProperty('simple.instance.uri');
const URL_BASE = (simpleInstanceUri.startsWith('https://')) ? simpleInstanceUri : `https://${simpleInstanceUri}`;
const quickImportRequest = sws.restRequestV1();
quickImportRequest.setRequestUrl(`${URL_BASE}/v1/import/json`);
quickImportRequest.setRequestMethod("POST");
quickImportRequest.setRequestHeader("Authorization", `Bearer ${new SimpleUser().getAccessToken()}`);
quickImportRequest.setRequestHeader("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundaryOmz20xyMCkE27rN7");
quickImportRequest.setRequestHeader("Accept", "*/*");
const body = `------WebKitFormBoundaryOmz20xyMCkE27rN7
Content-Disposition: form-data; name="file"; filename="sys_search_index_${data.record_id}.json"
Content-Type: application/json
${data}
------WebKitFormBoundaryOmz20xyMCkE27rN7`
quickImportRequest.setRequestBody(body);
quickImportRequest.execute();
}