2013-02-11 2 views
1

나는 여러 필드를 가진 도메인을 가진 Grails 프로젝트를 가지고 있는데, 그 중 필드 '가격'이 있습니다. 나는이 프로젝트에 검색 플러그인을 추가하며 일반 검색을 통해 잘 작동 : Grails 검색 가능한 검색 BigDecimal 범위

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?

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

[EDITED]

내 이전의 솔루션은 완벽하게 작동하지 않습니다

답변

0

이 같은 범위로 검색했던 감사드립니다. 검색과 번호 검색을 수행 할 수있는 올바른 방법은, 당신은 당신의 도메인 클래스이 추가 첫번째 필요 : 검색 할 다음

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