Комплексный поиск по классам домена Grails - PullRequest
0 голосов
/ 17 ноября 2010

Я хочу иметь возможность выполнять сложные поиски объектов Grails.В настоящее время это реализовано с использованием хранимых процедур на моем сайте, которые создают запрос SQL и анализируют все эти результаты.

Позволит ли что-то вроде плагина с возможностью поиска упростить эту задачу?Я думаю, что нет, так как он в основном делает поиск по тексту.Хранимые процедуры довольно сложны, и их трудно изменить.Наши пользователи - это сотрудники, и запросы связаны с опытом работы и тем, на кого они работали, какими навыками они обладают и т. Д. Объект домена «Сотрудник» может иметь такие вещи, как список ролей, содержащих навыки.Роль будет иметь дату начала и окончания и т. Д.

Список примеров запросов:

All users with 5 years of experience in C++
All users who have worked for Stackoverflow, in California
All users who have at least 5 years of C++ experience, at least 2 years of Java experience, have worked for StackOverflow, and are available to work now.

Ответы [ 4 ]

2 голосов
/ 17 ноября 2010

Я никогда не пробовал поисковый плагин, поэтому, возможно, продаю его коротко.Ваш лучший выбор - это, вероятно, HQL-запросы или построитель критериев Hibernate.Мне нравится HQL для сложных запросов, поскольку он похож на SQL.Сообщение в блоге, в котором сравнивается использование этих технологий от Grails, см. http://blog.xebia.com/2008/06/04/querying-associations-in-grails-with-hql-criteria-and-hibernatecriteriabuilder/. Справку по HQL см. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html. Критерии Hibernate см. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html

1 голос
/ 17 ноября 2010

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

FilterPane затем переводит поля вВстроенный критерий гибернации.

0 голосов
/ 19 ноября 2010

По моему опыту, HQL-запросы были единственным решением для сложных запросов.

В некоторых запросах даже было необходимо использовать не-спящие функции базовой БД, например, установить dialect = "org.hibernate.dialect.ExtendedMySqlDialect" в DataSource.groovy и затем реализовать что-то вроде этого:функции могут также помочь вам при работе с датами.

0 голосов
/ 17 ноября 2010

Все перечисленные вами запросы могут быть выполнены с помощью плагина с возможностью поиска .

Я считаю, что вы МОЖЕТЕ выполнить запросы, которые вы предложили с HQL, но Compass / Lucene действительно лучшеинструмент для этого решения

...