2012-04-02 83 views
1

我試着「讓我的腳趾溼」使用Grails,並已決定做一個配方站點的第一個項目。 即時通訊使用grails 2.0.1和使用mongoDB GORM持久性,這是工作正常,並在我的模型中使用static Searchable = true進行搜索。Grails的搜索

製作一個簡單的搜索工具,我已成功使用按名稱查找食譜:

def recipes = Recipe.withCriteria 
{ 
    ilike('name', params.name) 
} 

食譜可以通過名稱找到。我的問題是,如何搜索成分名稱以在搜索中標記爲結果(關於以下模型)? 從PHP和MySQL的到來,這將是那麼容易,因爲有加入什麼修改查詢

我的模型如下:

class Recipe 
{ 
    String name; 
    String method; 
    Date dateAdded; 

    static hasMany = [ingredients:Ingredient];  
    static Searchable = true; 
    static constraints = 
    { 
     name(blank:false, maxSize: 255) 
     method(blank:false) 
    } 

    static mapping = 
    { 
     sort dateAdded: "desc" 
    } 
} 

class Ingredient 
{ 
    String name; 

    static hasMany = [recipes:Recipe]; 
    static belongsTo = [Recipe] 
    static constraints = 
    { 
     name blank:false; 
    } 

    String toString() 
    { 
     return name; 
    } 
} 

回答

2

這應該是static searchable = true以一個小寫的「s」 - 見http://grails.org/Searchable+Plugin+-+Mapping

但檢索插件不與蒙哥或者其他的NoSQL數據存儲。這是因爲它是使用Hibernate事件實現的,以監聽與插入,刪除和更新數據庫行相對應的事件,並根據這些更改更新Lucene索引。由於混合中沒有Hibernate,因此Searchable不知道有任何更改。

+0

我並沒有意識到,搜索是不適合的NoSQL解決方案,所以感謝。我的另一個問題是,如何搜索成分集(使用hasMany定義),以便包含這些成分的食譜包含在搜索結果中:) – sparkeh9 2012-04-02 02:52:19

+1

可搜索插件還使用了一個真正舊版本的lucene。我在設置搜索時遇到問題。我寧願推薦查看Solr,而不是可搜索的。 XMLSlurper將一路幫助你。 – 2012-04-02 11:58:07

1

.withCriteria搜索已經沒有太大的做搜索的插件 - 它只是一個正常的SQL搜索。

嘗試像

def recipes = Recipe.withCriteria 
{ 
    or { 
     ilike('name', params.name) 
     ingredients { 
      ilike('name', params.name) 
     } 
    } 
} 

爲了在配方和成分的名稱進行搜索。

看到http://grails.org/doc/2.0.x/guide/GORM.html#criteria更多的幫助。

0

檢索插件可用於MongoDB的,但你需要配置並作爲默認行爲是使用Hibernate手動重新索引它。

  1. 改變你的Config.groovy mirrorchanges =虛假和bulkIndexOnStartup =假

  2. mapwith屬性添加到連接到MongoDB的所有域類。 靜態mapWith =「蒙戈」 靜態搜索=真

  3. 重新索引手動調用重新索引()從BootStrap.groovy中,每次你的域有更新事件。 高清的domainlist = DomainName.list() DomainName.reindex(的domainlist)

這是我提到,雖然我並沒有實現,因爲我並不需要它在兔子MQ一部分有用的鏈接此時此刻。希望這可以幫助。 http://spring.io/blog/2011/08/29/rabbitmq-enabling-grails-full-text-search-on-cloud-foundry/