Grailsでの全文検索

Grailsで全文検索を有効にするのは非常に簡単な作業です。 これを行うには、Grailsアプリケーションのすべてのエンティティをインデックス化できるSearchableプラグインを使用します。 Searchableを使用すると、インデックス作成および検索プロセス全体を抽象化できます。 同時に、プラグイン自体はCompassライブラリを使用します。これにより、オブジェクトが変更されたとき(つまり、データベースに保存するとき)に、自動的にインデックスが再作成されます。 コンパス自体は、本質的に非常に強力な「検索ORM」ツールです。

  1. 最下位レベルのコンパスはLuceneを使用しますが、インデックスの特別な実装を使用します。
  2. コンパスは、Luceneドキュメントの各ドメインオブジェクトにマップします。 オブジェクトの識別子は、ドキュメントの識別子になります。
  3. オブジェクトのフィールドは、ドキュメントのフィールドに変わります。
  4. 検索結果もオブジェクトです。 コンパスは、インデックスからのデータに基づいてそれらを作成(デシリアライズ)します。
  5. コンパスは、ネストされたオブジェクト(これを検索可能なコンポーネントと呼びます)およびオブジェクトリンク(検索可能な参照)を処理できます。 ネストされたオブジェクトはメイン文書内に保存されます。
  6. コンパスはトランザクションが可能です。
オブジェクトの操作は、計り知れないほど便利です。 Grailsドメインクラスをインデックス可能と宣言するには、次の形式の構成クロージャを追加する必要があります。



class Post { static searchable = { category index: 'not_analyzed', excludeFromAll: true title boost: 2.0 comments component: true } static hasMany = [comments: Comment] User author String title, post, category Date createdAt }
      
      





これで、新しく作成されたすべてのPostインスタンスにインデックスが作成されます。



一般に、これ以上行う必要はありません。 次の形式の検索クエリを既に作成できます。

 Post.search("   ")
      
      



その結果がアプリケーションの本質になります! クエリ言語Luceneを使用できます。



実際、今は検索可能なドキュメントを再販したくありませんでした。 それにはいくつかの問題があります。 それらは、CompassがLuceneと他の検索エンジンの両方を使用できる技術的に洗練された多目的な製品であるという事実に由来します。 したがって、作成者はこのコードをさらに維持することを望んでいません。 そして、その著者であるShay Banonは、より普遍的ではないが、 よりクールなもの-ElasticSearch検索エンジンを作成することにしました。



ElasticSearch:
  1. Lucene 3に基づく
  2. 元々、拡張性が高く手頃な価格で設計されています。
  3. キャッシングメカニズムが含まれています(ちなみに、 Solrとは異なります)。
概念的には、ElasticSearchはCompassとはまったく異なります。 実際、ElasticSearchはJSONオブジェクトのインデックス付きリポジトリです。 このリポジトリは、異なるタイプのオブジェクトを区別したり、ネストされたオブジェクトを処理したりできます。 まあ、最も重要なこと-それは検索する方法を知っています。 クエリ言語はJSONも表し、「裸の」Luceneとほぼ同じ機能セットを提供します。



コンパスは、専用の組み込みソリューションです。 ElasticSearchに関しては、組み込み(JVM内)およびHTTPデーモンの両方として存在できます。 JSONを知っているすべてのプログラムは、PHPコード、Java、Ruby、または.NETであってもElasticSearchデーモンにアクセスできます。



ここに含まれるソフトウェアを完全に理解したい人のために、私はこれを図に描いてみました:







ここには、3つのレベルが表示されます。 左側は、コンパスに基づく現在のスタックです。 右側は、ElasticSearchに基づくスタックです。 ただし、Grailsプラグインの関数の分布はまったく同じではありません(たとえば、CompassはJavaオブジェクトをLuceneドキュメントに変換できますが、ElasticSearchは変換できません)。



Searchableを使用している不幸な人々(そしてこれらも私たちもそうだった)にとって今、何が輝いているのか? 現在、特定の移行期間があります:

しかし、そのようなことはそれ自体では行われません。 興味のある人に何を提供できますか? 現在、インターネットの奥深くで、ElasticSearch用の新しいGrailsプラグインの開発が始まっています。 プラグインを開発する目的は次のとおりです。

プラグインはすでに実際のアプリケーションで正常に動作しています。 しかし、より多くのユーザーが必要であり、フィードバックが必要です! プラグインを積極的に使用し始め、現在見られない問題を指摘し始める人々が必要です。



プラグインはどこで入手できますか? もちろん、私のブランチは優れています:-)-より多くの機能があり、すべての問題を解決するためにGrailsアプリケーションを常に実行しています。 定期的に、私の変更はメインブランチに追加されますが、このプロセスは遅れます。



次のようにGithubからコードをインストールできます。

  1. Grailsアプリケーションが既に動作していると仮定します。
  2. gitとbuildをいじる気がなければ、既にパッケージ化されたプラグインを置くことができます:
     grails install-plugin https://github.com/downloads/spn/elasticsearch-grails-plugin/grails-elasticsearch-0.14.2.2.zip
          
          



  3. 自分で組み立てたい場合、これはもう少し複雑です:
     wget https://github.com/spn/elasticsearch-grails-plugin/tarball/master tar xvzf spn-elasticsearch-grails-plugin-3fde6c4.tar.gz cd spn-elasticsearch-grails-plugin-3fde6c4 grails package-plugin
          
          



    -同じパッケージプラグインを取得します(githubのダウンロードリンクからファイル名)
一般的に、試してみることをお勧めします。 詳細については、プラグイン自体がテキストGrailsアプリケーションとして機能します。入力するだけです
 grails run-app
      
      



プラグインのあるフォルダー内。



All Articles