Вопрос

Я никогда раньше не сталкивался с таким приложением / классом, как Zend Search Lucene, поскольку я всегда запрашивал свою базу данных.

Zend_Search_Lucene работает с документами как с атомарными объектами для индексации.Документ разделен на именованные поля, и у полей есть содержимое , по которому можно выполнять поиск.

Документ представлен классом Zend_Search_Lucene_Document, и объекты этого класса содержат экземпляры Zend_Search_Lucene_Field которые представляют поля в документе .

Важно отметить, что в индекс может быть добавлена любая информация.Информация, относящаяся к конкретному приложению, или метаданные могут храниться в полях документа , а затем извлекаться вместе с документом во время поиска.

Таким образом, это в основном говорит о том, что я могу применить это ко всему, включая базы данных, ключевым моментом здесь является создание индексов для поиска.

Что я пытаюсь понять, так это то, где именно я должен хранить индексы в моем приложении, давайте возьмем, к примеру, у нас есть телефоны, хранящиеся в базе данных, производители, модели - как я должен классифицировать индексы?

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

Это было полезно?

Решение

Индекс Lucene хранится вне базы данных.Я бы сохранил его в каталоге "данные" как аналог ваших контроллеров, моделей и представлений.Но вы можете хранить его где угодно;вам просто нужно указать путь, когда вы открываете индекс для запроса.

По сути, это избыточная копия документов, хранящихся в вашей базе данных, и вы должны сами синхронизировать их.Это один из недостатков:вам нужно написать код для заполнения индекса Lucene на основе результатов запроса к вашей базе данных.Когда вы добавляете данные в базу данных, вам также необходимо обновить свой индекс Lucene.

Преимущество использования внешнего решения для полнотекстового индексирования заключается в том, что вы можете уменьшить рабочую нагрузку на вашу СУБД.Чтобы найти документ, вы выполняете поиск с помощью Lucene API.Результат должен включать поле, содержащее значение первичного ключа (как часть документа, но нет необходимости анализировать его для поиска FT).Вы получаете это поле обратно при выполнении поиска Lucene, так что вы можете найти соответствующую строку в базе данных.

Помогает ли это ответить на ваш вопрос?

Недавно я провел презентацию для MySQL University, в которой сравнивал решения для полнотекстового поиска:http://forge.mysql.com/wiki/Practical_Full-Text_Search_in_MySQL

Я также публикую свои слайды по адресу http://www.SlideShare.net/billkarwin.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top