1

複数のフィールドを持つドメインを持つ 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 など、データ型の種類は重要ですか?

ありがとうございました

4

1 に答える 1

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+-+よくある質問

于 2013-08-14T17:06:13.763 に答える