2012-04-02 9 views
1

Imはgrailsを使って「つま先を濡らす」ことを試み、最初のプロジェクトとしてレシピサイトを作ることに決めました。 Im 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

小文字の「s」とstatic searchable = trueする必要があること - を参照http://grails.org/Searchable+Plugin+-+Mapping

しかし、SearchableプラグインはMongoや他のNoSQLデータストアでは機能しません。これは、Hibernateイベントを使用してデータベース行の挿入、削除、および更新に対応するイベントをリッスンし、それらの変更に基づいてLuceneインデックスを更新するために実装されるためです。ミックスにはHibernateがないので、Searchableは変更を認識していません。

+0

私は、NoSQLソリューションの検索に適していないことを認識していませんでした。私の他の質問は、どのようにそれらの成分を含むレシピが検索結果に含まれるように、(hasManyを使用して定義された)成分のセットを検索できますか? – sparkeh9

+1

検索可能なプラグインは、本当に古いバージョンのluceneも使用します。私はそれを検索可能で設定することに問題がありました。私はむしろ検索可能ではなくSolrを見ることをお勧めします。 XMLSlurperはあなたを助けるでしょう。 –

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

Searchable Pluginはmongodbで動作しますが、デフォルト動作ではhibernateを使用しているため手動で設定して再インデックスする必要があります。

  1. 変更あなたのconfig.groovyの偽mirrorchanges =とbulkIndexOnStartup = falseを

  2. はMongoDBのために接続されているすべてのドメインクラスにmapwith属性を追加します。 静的bootstrap.groovyからmapWith =「モンゴ」 静的検索可能=真

  3. REINDEX手動(REINDEXを呼び出すことによって)と毎回、あなたのドメインが更新イベントがあります。 DEF domainList = DomainName.list() DomainName.reindex(domainList)

これは私がそれを必要としないよう、私はウサギのMQ一部を実装していませんでしたけれども、私が呼ばれたから役立つリンクです瞬間。お役に立てれば。 http://spring.io/blog/2011/08/29/rabbitmq-enabling-grails-full-text-search-on-cloud-foundry/

関連する問題