2013-02-11 93 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?

谢谢

回答

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