[Из песочницы] Поиск с помощью Lucene в Playframework 1.x
В моем веб-проекте на Playframework-e в один прекрасный момент потребовался поиск. Идею искать в базе через like я сразу отмел, потому что хотелось ранжирования и прочих плюшек «умного» поиска, а изобретать свой велосипед не было ни времени ни желания. Так как проект на Java — было очень соблазнительно использовать для этого Lucene. В гугле я сразу нашел замечательный модуль для Playframework-а под названием Search, также был найден модуль Elastic Search, который тоже использует Lucene, но он требует установки отдельного сервера, и потому был отметен. Модуль Search понравился мне своей простотой — все «навороты» в нем инкапсулированы, так что пользоваться им очень легко. С установкой модуля, как и всегда в Play-e, проблем не возникло, команда play install search отработала на «ура» и выкачала модуль из репозитория. Добавив module.search=${play.path}/modules/search-2.0 в application.conf я уже мог использовать его в приложении. Следуя краткому руководству, я добавил к сущности Entry, по которой собственно и следовало осуществлять поиск, аннотацию @Indexed, а полю description — аннотацию @Field. Написав в контроллере примерно следующий код: public static void search (String phrase, int page) { int pageSize = PAGE_SIZE; Query query = Search.search («description:» + phrase, Entry.class); List entries = query.page (page*pageSize, pageSize).fetch (); long totalCount = query.count (); render (entries, totalCount, page, pageSize, phrase); } Я уже был готов делать первые тесты и наращивать функционал, но тут начались проблемы…Читать дальше →