Есть строка, где хранятся неполные данные т.е. неизвестное кол-во символов заменено на *, нужно найти соответствующую строку с помощью полной. Это не совсем базовый алгоритм полнотекстового поиска т.к. нет "слов". Сейчас это решается "перебором" всех возможных вариантов, что не гибко и долго. Базовое хранилище - redis.
Пример: "fa*la*" (хранится в базе), а находится с помощью: "fancylang"
Записей не очень много (1-5к). Скорость критична.
Gregory Kaplan: у вас в таблице лежат правила. Чтобы понять, подходит слово или нет, нужно применить ВСЕ правила к этой строке и отсеять те, которые не подходят. Разумеется, это будет медленно работать.
Если нет никаких особенностей в шаблонах, то решение задачи - только полный перебор.
Лично я бы сложил в память все шаблоны и индексы записей. А затем просто написал бы алгоритм спуска по шаблонам. Если сделать это все на С или C++, то это сработало бы.
Алексей Черемисин: сейчас просто очень урезанная версия, по условиям определенным, но хотелось бы гибкое решение. по zset не походит т.к. все "вариации" не сохранить (и неизвестно, какими они могут быть)
Пока ничего в головку кроме enum преобразования алфавита в битовое поле не приходит.
Сначала отсеивать по наличию алфавита, а затем делать реверсивное применение шаблона к строке.