2013-02-11 2 views
1

У меня есть проект Grails с доменом, который имеет несколько полей, среди которых у меня есть поле «цена». я добавил для поиска плагин для проекта, и она отлично работает, с помощью общего поиска:Grails searchable search BigDecimal range

def searchResults = searchableService.search(params.q, params) 

Теперь мне нужно добавить поиск цен через диапазон. Пример: цена от $ 100 до $ 200. Я попытался следующие, но это не работает:

def searchResults = searchableService.search({ 
    queryString(params.q) 
    lt("price", params.pmax?.trim().toBigDecimal()) 
},params) 

Как реализовать поиск по диапазону? Неважно, какой тип данных это: Integer, BigDecimal, Long?

Спасибо

ответ

0

Я сделал поиск по диапазону, как это:

def searchResults = searchableService.search(params){ 
    must(queryString(params.q) { 
     ge('price', params.pmax as BigDecimal) 
     le('price', params.pmin as BigDecimal) 
    }) 
} 

[Изменено]

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

searchable { 
    price index: "not_analyzed", format : "0000000000" 
} 

А потом сделать поиск:

def searchResults = yourDomainClass.search("price:[" + (params.pmin ? params.pmin.trim().padLeft(10, "0") : "*" )+ " TO " + (params.pmax ? params.pmax.trim().padLeft(10, "0") : "*" )+ "]" 

Все, что нужно, потому что, когда ваш данные индексируются, также текстурируются.

http://brettscott.wordpress.com/2011/11/19/lucene-number-range-search-integers-floats/

http://grails.org/Searchable+Plugin+-+FAQ