1

Spring MVC、Spring、Hibernateを使用してWebアプリケーションを開発しています。

アプリケーションに効率的なフリーテキスト検索機能を追加する必要があります。このために、Hibernate Search(内部でLuceneを使用)または直接luceneのいずれかを使用することを検討しています。

アプリケーションですでにHibernateを使用しているので、私たちにとって最良のオプションは何ですか?お互いの長所と短所は何ですか?

ありがとう。

4

3 に答える 3

6

あなたはそれを自分で言いました-あなたはLuceneを何らかの方法で使用するでしょう。

生のLuceneAPIは非常に使いやすいものではありません。HibernateSearchよりもはるかに低レベルです。すでにHibernateを使用している場合は、簡単です。HibernateSearchを使用してテキスト検索機能を実装します。

于 2011-04-27T15:20:40.770 に答える
4

免責事項:私はHibernateSearchの開発者の1人です。

このプロジェクトの目標は、LuceneやSolrと競合することではなく、Hibernateアプリケーションとの統合を可能な限り促進し、2つの世界の同期を維持し、すべてのマッピングとCRUD操作を複製する必要をなくすことです。

いくつかの一般的なヘルパーと優れたカプセル化を提供しますが、HibernateSearchはLuceneAPIへの直接参照を渡すこともできるため、「生の」LuceneAPIを使用する必要がある場合にスタックすることはありません。また、インデックスへの書き込みについても、Hibernate Searchは、既知の要件のほとんどを解決する共通のパターンを提供しますが、非常に非標準的な要件がある場合は、書き込まれたドキュメントを完全に制御できます。

Solrは優れた代替手段ですが、別個のサーバーであるため、REST APIを介して対話する必要があります。これは、長所と短所があり、まったく異なります。管理する2番目のサービスがあることは必ずしも必要ではありません。もちろん、リモート呼び出しは、Luceneおよびそのすべての内部フィルターとキャッシュへの直接参照ほど効率的ではありません。Luceneのすべての機能をリモートAPIを介して公開できるわけではありません。「低レベル」の操作を行う必要がある場合、これがSolrに実装されていないと、(Solrにパッチを適用せずに)実行できません。それでもSolrは非常にかわいいので、特に他のJava以外のアプリケーションとインデックスを共有したい場合は、Hibernate Search用のSolrバックエンドを追加して、最終的にSolrサーバーの同期を維持することができます(特に関心がある場合、そしておそらく手助け)。

最後に、LuceneAPIは本当にハードコアなものです。Hibernate Searchを使用する人々に安定したAPIを公開しながら、最高のパフォーマンスを提供するためにそれを最大限に活用するために多大な努力を費やしています。基本的に、これまですべてのリリースは下位互換性があり、最新の使用に「ドロップイン」パフォーマンスを提供します。 Luceneの最大のトリック-実際にはAPIを頻繁に変更します。これらの変更は常にエキサイティングですが、適切な抽象化を使用しない場合は、アプリケーションでそれを維持する準備をしてください。

于 2011-06-01T23:36:36.567 に答える
1

Luceneを使用するもう1つの方法は、SOLRとして知られるmiddlmanAPIを取得することです。SOLRはLuceneに接続し、検索のためにHTTP呼び出しを実行します。Solrが消費するXMLをビルドして解析する必要があることに注意してください。Luceneのすべての機能はSOLRを介して拡張されており、非常に役立つはずです。

于 2011-04-27T15:28:57.310 に答える