Процесс индексатора поиска Hibernate зависает после половины работы

У меня есть 7 классов сущностей для индексации с помощью Hibernate Search. Попробовав и MassIndexer, и FlushToIndexes, процесс индексатора перебрал самые маленькие объекты, но самые большие объекты / таблицы не завершились, хотя MassIndexerProgressMonitor сообщил, что индексирование завершено. Процесс просто зависает, когда он достигает выделенных 100-200 МБ. Я хочу, чтобы процесс индексации завершился правильно.

Вопросы: правильный ли код? Следует ли настраивать параметры гибернации или базы данных?


Среда: 64-битная Windows 7, JBoss, Struts2, Hibernate, Hibernate Search, Lucene, SQL Server. Индекс поиска Hibernate помещается в файловую систему.


Пример кода MassIndexer:

  final Session session = HibernateSessionFactory.getSession();
  final FullTextSession fullTextSession = Search.getFullTextSession(session);
  MassIndexerProgressMonitor monitor = new IndexProgressMonitor("Kanalregister");
  fullTextSession.createIndexer()
                 .purgeAllOnStart(true)
                 .progressMonitor(monitor)
                 .batchSizeToLoadObjects(BATCH_SIZE)    // 250000
                 .startAndWait();

Пример кода FlushToIndexes: (из справочного документа Hibernate) (похоже, индекс в порядке, но никогда не заканчивается)

  final Session session = HibernateSessionFactory.getSession();
  final FullTextSession fullTextSession = Search.getFullTextSession(session);
  fullTextSession.setFlushMode(FlushMode.MANUAL);
  fullTextSession.setCacheMode(CacheMode.IGNORE);
  Transaction t1 = fullTextSession.beginTransaction();
  // Scrollable results will avoid loading too many objects in memory
  ScrollableResults results = fullTextSession.createCriteria(Land.class)
                                             .setFetchSize(BATCH_SIZE) // 250000
                                             .scroll(ScrollMode.FORWARD_ONLY);
  int index = 0;
  while (results.next()) {
     index++;
     fullTextSession.index(results.get(0)); // index each element
     if (index % BATCH_SIZE == 0) {
        fullTextSession.flushToIndexes(); // apply changes to indexes
        fullTextSession.clear(); // free memory since the queue is processed
     }
  }
  t1.commit();

Код проверяется на завершение при имитации всей работы по индексации с использованием следующего параметра в hibernate.cfg.xml:

  <property name="hibernate.search.default.worker.backend">blackhole</property>

person Thor Hovden    schedule 03.01.2013    source источник
comment
Привет, не могли бы вы уточнить: - какая база данных - какие версии - какой из двух методов работает?   -  person Sanne    schedule 03.01.2013
comment
Привет, я использую SQL Server 2008. MassIndexer работает наполовину, FlushToIndexes может создавать индекс для небольших таблиц. (Упс, при попытке увеличить таблицу у меня возникли некоторые ошибки конфигурации для большей таблицы, подождите, я исправлю)   -  person Thor Hovden    schedule 03.01.2013
comment
Ваш batch_size безумно велик: обычно он должен быть от 5 до 100; тем не менее, я не думаю, что это объясняет проблему. Не могли бы вы проверить активность сборщика мусора и опубликовать полный дамп потока? Возможно, это больше подходит для форумов поиска Hibernate forum.hibernate.org/viewforum.php? f = 9   -  person Sanne    schedule 04.01.2013
comment
Хорошая идея, я проверю эти форумы и обновлю здесь, когда найду ответы.   -  person Thor Hovden    schedule 04.01.2013
comment
По размеру партии; Я даже пробовал использовать размер партии 25 миллионов, чтобы исключить возможность ограничения емкости. На данный момент эта проблема решена.   -  person Thor Hovden    schedule 04.01.2013


Ответы (1)


Приведенный выше код проверен и верен.

Считается, что моя проблема с незавершенной консолью связана с Eclipse, так как распечатка в конце main () действительно отображалась.

Были некоторые отсутствующие классы сущностей (в моей модели), о которых не сообщалось должным образом. Как только я получил уведомление об этом и добавил их в свою модель, процесс индексации для MassIndexer успешно завершился, о чем свидетельствуют 3+ файла в каждом каталоге в индексе lucene.

person Thor Hovden    schedule 03.01.2013