Индексирование миллионов записей из нескольких таблиц в Lucene.Net - PullRequest
0 голосов
/ 20 сентября 2018

У нас проблемы с индексацией записей из нашей базы данных в Lucene Index.Это наша текущая ситуация.

Нам нужно проиндексировать данные из нескольких таблиц из базы данных.Все они связаны с внешними ключами, от 1 до n отношений.Полная запись, которую мы хотели бы проиндексировать, представляет собой комбинацию данных из этой таблицы.Проблема в том, что у нас есть десятки миллионов записей в базе данных.Наши подходы:

  1. Выбор всех записей с помощью запроса LEFT JOIN, затем мы используем метод
IndexWriter.AddDocument(IEnumerable<IIndexableField> doc)

, чтобы добавить эти записи в пакете в наш индекс.Это работает нормально только с одной таблицей - когда мы объединяем несколько таблиц, мы получаем тайм-ауты при подключении к базе данных, и наши администраторы говорят нам, что мы убиваем сервер своими запросами.Во всех наших объединениях указаны ключи, и мы ничего не можем сделать, чтобы улучшить их - слишком много данных для загрузки в одном запросе.

Выберите данные по одной таблице за раз.Это тоже хорошо, но мы либо заканчиваем с несколькими индексами - каждый из которых содержит только часть данных, которые мы хотим - или один индекс с несколькими «неполными» записями.Если вместо вставки нескольких неполных записей мы попытаемся обновить существующие:
IndexWriter.UpdateDocument(Term term, IEnumerable<IIndexableField> doc)

, это займет слишком много времени.Обновление в этом случае происходит очень медленно.

Итак, вопрос в том, , что будет лучшим подходом при индексации данных из нескольких таблиц, содержащих миллионы записей ?

...