2010-11-16 2 views
0

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

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

Перечень примеров запросов:

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. 

ответ

2

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

0

Все запросы, которые вы перечислили может быть достигнуто с searchable plugin.

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

1

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

FilterPane затем преобразует поля в построитель критериев Hibernate.

0

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

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

package org.hibernate.dialect; 

import org.hibernate.Hibernate; 
import org.hibernate.dialect.function.*; 

public class ExtendedMySqlDialect extends MySQL5InnoDBDialect { 
    public ExtendedMySqlDialect() { 
     registerFunction("timeStampAdd", new SQLFunctionTemplate(Hibernate.TIMESTAMP, "TIMESTAMPADD(?1, ?2, ?3)")); 
     registerFunction("timeStampDiff", new SQLFunctionTemplate(Hibernate.INTEGER, "TIMESTAMPDIFF(?1, ?2, ?3)")); 
}

Вышеуказанные функции могут также помочь вам при работе с датами.

 Смежные вопросы

  • Нет связанных вопросов^_^