2015-03-06 2 views
0

Я использую Hibernate Поиск для индексирования и поиска записей базы данных. Для быстрой вставки большого количества данных я использовал JdbcTemplates для пакетной вставки, но когда мы это делаем, данные, вставленные вручную, больше не индексируются.Hibernate Search Mass Indexer пользовательский запрос

Чтобы преодолеть проблему, я использовал Mass Indexer, но только принимает имя объекта. Можно ли индексировать определенный набор данных с помощью пользовательских запросов? Скажем, было бы достаточно проиндексировать контакты, у которых есть идентификатор группы X.

ftm = Search.getFullTextEntityManager(em); 
indexer = ftm.createIndexer(Contact.class) 
    .batchSizeToLoadObjects(100) 
    .cacheMode(CacheMode.NORMAL) 
    .threadsToLoadObjects(2) 
    .start(); 

P.S. As per the documentation, создание пользовательских индексов массы возможно, но это намного больше, чем я ожидал, и я не уверен, разрешает ли он проблему. Другим вариантом может быть выбор записей и добавление к индексу вручную, но это также невозможно.

ответ

2

Я предполагаю, что функция, о которой вы просите, снята в HSEARCH-499. идея заключалась бы в том, чтобы работать с отложенным критерием запроса. Однако, как вы можете видеть из статуса проблемы, она еще не реализована. Если вам нравится, вы можете оживить дискуссию.

Одним из вариантов, который может ускорить индексацию, является использование EntityIndexingIntercpetor. Это позволяет вам условно пропускать индексирование данного объекта на основе его состояния, например, «идентификатор группы». Сам индекс по-прежнему необходимо загружать во время массовой индексации, но в зависимости от вашей модели он все равно может ускорить работу, особенно если ваша модель немного сложнее.