Как построить индекс поиска для таблицы базы данных только для чтения? - PullRequest
0 голосов
/ 28 февраля 2012

Я создаю WebService (CXF с Spring и JPA) для поиска в таблице базы данных только для чтения, то есть в таблице, которая находится в базе данных, у меня есть только разрешения на чтение, я не должен ничего там менять.

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

Я пытаюсь понять, поможет ли мне в этом Hibernate Search, и как я могу это сделать. Я думаю, что это не может привести к тому, что в документации сказано, что он строит индекс при обновлении сущностей (что никогда не происходило в моем WebService). Но я новичок во всей его терминологии, поэтому могу неправильно истолковывать вещи.

Какой хороший путь для этого? Что я должен изучить в первую очередь, чтобы лучше понять, что мне нужно делать? Заранее спасибо!

1 Ответ

2 голосов
/ 29 февраля 2012

Я думаю, что Hibernate Search может идеально подойти для вашей задачи, потому что он позволяет вам строить / сохранять индекс в файловой системе. Таким образом, база данных остается нетронутой. Учитывая, что вы уже используете JPA, включить Hibernate Search очень просто. Вам просто нужно получить jar-файл Hibernate Search и добавить его в свой проект, затем аннотировать сущности, которые вы хотите проиндексировать, с помощью @Indexed, а поля, которые вы хотите проиндексировать, с помощью @Field. Конечно, это очень просто, но онлайн-документация должна помочь вам. Есть раздел, посвященный началу работы, который объясняет основы. Получив это, вы можете глубже погрузиться в разные анализаторы и т. Д. - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/

Я пытаюсь понять, поможет ли мне в этом Hibernate Search, и как я мог пойти об этом. Я думаю, что это не может вызвать документацию говорит он строит индекс при обновлении сущностей (которые никогда дело в моем WebService). Но я новичок во всей его терминологии, поэтому я может неправильно истолковывать вещи.

Что ж, Search поможет вам с помощью автоматических обновлений индекса, чтобы синхронизировать ваш индекс и базу данных для приложения чтения / записи. Тем не менее, Search также имеет программный API для создания начального индекса или перестроения индекса вручную, когда вы считаете нужным. Есть несколько способов сделать это, но это может быть так просто, как:

EntityManager em = entityManagerFactory.createEntityManager();
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
fullTextEntityManager.createIndexer().startAndWait();

Опять же, в документации есть больше примеров. Я рекомендую вам следовать примерам начала и задавать конкретные вопросы / проблемы, с которыми вы сталкиваетесь.

...