Zend: генерация индекса, плюсы и минусы Zend_Search_Lucene

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

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

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

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

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

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

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


person meder omuraliev    schedule 10.12.2009    source источник


Ответы (1)


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

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

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

Это поможет ответить на ваш вопрос?

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

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

person Bill Karwin    schedule 12.12.2009