0

Grails Searchable プラグインを使用していましたが、GORM MongoDB プラグインに切り替えました。Searchable プラグインには、ブール コネクタとワイルドカードを使用してすべてのフィールドを検索できる search() メソッドがあります。Grails GORM MongoDB プラグインに同様の方法はありますか?

そうでない場合、同様の方法を作成するためのベスト プラクティスは何ですか?

4

2 に答える 2

1

Searchable と Elasticsearch プラグインは Hibernate プラグインに依存しているようで、MongoDB GORM では機能しません。低レベル API と mongo '$regex' operator を使用して、Mongo 用の単純な検索サービスを実装しました。

「Page」という名前のドメイン クラスの「content」プロパティでの検索の例を次に示します。

class SearchService {
  static transactional = false
   def query(String query){
    return Page.collection.find( ['content':['$regex':query, '$options': 'i']]).collect({
      it as Page
    })

  }
}
于 2012-08-25T23:13:00.933 に答える
0

基本的に、Lucas T が言及した正規表現検索は、柔軟な検索を構築するための最良の方法ですが、大文字と小文字を無視する正規表現検索 ('$options': 'i') の使用はお勧めしません。ignore case を使用すると、mongodb はインデックスを使用できず、各ドキュメントをチェックする必要があるため、パフォーマンスが低下します。

私のアプローチは、ドキュメントごとに正規化された検索キーワードを格納する新しいフィールドをドキュメントに追加することです。私は通常、大文字と小文字を区別し、正規表現で処理するのが難しい文字を取り除くことで、キーワードを正規化します。後者は、データとクエリのニーズによって異なります。先頭に対する正規表現一致も、インデックスをより効率的に使用します。

ページの最後を参照してください: http://docs.mongodb.org/manual/reference/operator/regex/

于 2013-02-26T13:00:13.100 に答える