2012-02-28 2 views
0

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

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

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

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

ответ

2

Я думаю, что 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 также есть программный API для создания начального индекса или вручную перестроить индекс, когда вы считаете нужным. Существует несколько способов сделать это, но это может быть так же просто:

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

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

+0

Только то, что мне нужно. Большое спасибо! – elias