Grails可搜索搜索BigDecimal范围

时间:2013-02-11 02:05:54

标签: search grails range searchable

我的Grails项目包含多个字段的域名,其中我有字段“价格”。 我在项目中添加了可搜索的插件,它通过常规搜索工作正常:

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?

谢谢

1 个答案:

答案 0 :(得分:0)

我按照这样的范围进行搜索:

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

[EDITED]

我之前的解决方案并不完美。 使用可搜索的数字进行搜索的正确方法,首先需要在域类中添加:

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