В системе ERP в одной базе данных содержится более 2000 таблиц, содержащих более 100 тыс. Строк. Чтобы улучшить пользовательский опыт поиска, мы извлекаем данные из MySQL в Elasticsearch. Каждая таблица может иметь от 3 до 5 столбцов, но имена и типы столбцов различны.
Существует 2 варианта создания индексов ES:
Опция 1: Просто создайте один индекс в ElasticSearch, но индекс будет содержать более 1000 полей. Это сопоставление выглядит так:
{
"myIndices": {
"mappings": {
"data": {
"properties": {
"datatype": {
"type": "string"
},
"table1_userName": {
"type": "string"
},
"table1_userAddr": {
"type": "string"
},
"table2_post": {
"type": "string"
},
"table2_tags": {
"type": "string"
},
"table3_comment": {
"type": "string"
},
...
"table999_xxxx": {
"type": "string"
},
}
}
}
}
Но я беспокоюсь, что этот параметр вызовет проблемы с производительностью, поскольку существует очень много разреженных данных. (Каждый документ / строки имеет только 3 ~ 4 допустимых поля). Между тем, ES6 ~ 7 убрал функцию «типы», каждый индекс должен содержать только одну модель данных, поэтому мы используем пользовательское поле «тип данных», чтобы указать, какие типы нам нужно запрашивать.
Опция 2 : создание нескольких индексов: создание индекса для каждой модели. Но будут созданы тысячи индексов, что значительно увеличивает стоимость обслуживания индексов.
Какой из них является наилучшим?