【问题标题】:Grails searchable search BigDecimal rangeGrails 可搜索搜索 BigDecimal 范围
【发布时间】:2013-02-11 02:05:53
【问题描述】:

我的 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?

谢谢

【问题讨论】:

    标签: search grails range searchable


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2011-07-22
      • 2011-02-06
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多