Спросите образец дизайна - PullRequest
0 голосов
/ 19 ноября 2010

Мы работаем над веб-приложением с моделью поиска.

В сервлете поиска он захватывает параметры запроса от клиента, а затем создает поисковый запрос hibernate для поиска.

Теперь проблема в том, что параметры клиента изменчивы!.

Все принимаемые нами параметры перечислены следующим образом:

1) ключевое слово.

Ключевое слово (а)используя для поиска, поисковый запрос может быть обработан, даже если этот параметр передан.

Допустимый пример:

/search?keyword="test"

2) lowleftX, lowleftY, upperrightX, upperrightY.

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

И эти четыре параметра могут одновременно встречаться с ключевым словом.

Допустимый пример:

/search?lowleftX=10&lowleftY=10&upperrightX=40&upperrightY=30
/search?lowleftX=10&lowleftY=10&upperrightX=40&upperrightY=30&keyword="test"

3) категория

Используется для ограничения области поиска (просто поиск в специальной категории).

4) start, limit

Эти два параметраиспользуются для подкачки.

5) returnFields

ReturnFields, которые будут извлечены из индекса (если он хранится в индексе) и вернутся к клиенту.

Поэтому я понятия не имею, как построить запрос с использованием синтаксиса оценки (если .... еще .... если ...).

Может кто-нибудь сказать мне, как?

1 Ответ

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

Понятия не имею, что вы имеете в виду под «оценочным синтаксисом», но мне кажется, что пункты 1–3 являются фактическим запросом Lucene.Вам нужно будет проверить параметры и решить, в зависимости от имени и количества параметров, какой тип запроса у вас есть.Используя различные подклассы Query, в частности BooleanQuery, вы затем строите соответствующий запрос Lucene и используете его для создания Hibernate Search FullTextQuery.В этом полнотекстовом запросе вы указываете параметры start и limit.Если вы используете проекции для извлечения значений полей непосредственно из индекса, вы также задаете имена спроецированных полей в полнотекстовом запросе.Надеюсь, это немного поможет.

...