2013-02-11 91 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