Транзакции не изолированы в Solr - фиксация или откат затронут все документы, поставленные в очередь для индекса, а не только те, которые принадлежат потоку. Это то, что вы обнаружили сами, и то, что происходит в то время, когда DIH работает за кулисами, это то, что происходит.
Обходной путь обычно состоит в том, чтобы отказаться от использования DIH и вместо этого проиндексировать все документы самостоятельно. Это даст вам полный контроль над процессом индексации. Я бы постарался избежать необходимости удалять все документы из индекса при запуске - и, если возможно, отслеживать удаленные документы (и удалять их по мере их удаления в веб-интерфейсе), а затем выполнять дополнительное массовое удаление позже (если вы подозреваете, что они не были удалены по какой-то причине).
Другой вариант - выполнить операцию DIH для отдельного индекса, а затем использовать псевдоним сбора , чтобы поменять там, где были найдены точки сбора после завершения индексации. Это позволяет вам выполнить полный индекс для отдельной коллекции, а когда он закончится, замените текущий на новый и начните обслуживать запросы с только что созданного.
Имейте в виду, что если вы изменяете базовые данные при индексации через DIH и полагаетесь на прямое обновление Solr, вы получите неправильные данные в индексе, так как прямое обновление будет выполнено для другая коллекция / индекс.
Мой выбор - попытаться синхронизировать коллекцию Solr с вашей базой данных без использования DIH, а вместо этого полагаться на прямые обновления. Затем вы можете использовать commitWithin
, чтобы разрешить нескольким потокам добавлять документы без необходимости явной фиксации в любом потоке.