Сохраните пары [tag, UID] в реляционной базе данных.Каждый раз, когда тег добавляется или обновляется, он добавляется и обновляется в этой таблице в базе данных.
При выполнении поиска Lucene, который включает как данные тега (хранящиеся в базе данных), так и контент (проиндексированный в Lucene)вам нужно будет объединить результаты вместе.Один из способов сделать это:
- Сделать запрос к базе данных, чтобы получить все UID для рассматриваемого тега
- Перевести все UID в идентификаторы документов Lucene и установитьбит в BitSet для каждого соответствующего идентификатора документа Lucene
- Создайте фильтр, который упаковывает BitSet, и передайте этот фильтр в ваш поиск.
Мы реализовали этот подход в нашей системе,и это работает хорошо.Возможно, вам придется поместить кеш перед базой данных из соображений производительности.Детали шага (3) будут зависеть от того, какую версию Lucene вы используете.