web-dev-qa-db-ja.com

SQL Server 2008全文検索(FTS)とLucene.NET

過去にSQL2005とLucene.NETについて質問があったことは知っていますが、2008年以降、SQL 2005に多くの変更が加えられ、誰かが私に賛否両論(または記事へのリンク)を教えてくれるかどうか疑問に思っていました。

41
ajma

2006年にSQLServer 2005のFTSの上に中規模のナレッジベース(おそらく2GBのインデックス付きテキスト)を構築し、2008年のiFTSに移行しました。どちらの状況も私にとってはうまくいきましたが、2005年から2008年への移行は実際には私にとって改善でした。

私の状況は、毎晩更新されるだけのデータにインデックスを付けるという意味でStackOverflowのようなものではありませんでしたが、複数のCONTAINSTABLEステートメントからの検索結果を相互に結合してリレーショナルテーブルに戻そうとしていました。

2005年のFTSでは、これは、各CONTAINSTABLEがインデックスに対して検索を実行し、完全な結果を返し、DBエンジンにそれらの結果をリレーショナルテーブルに結合させる必要があることを意味しました(これはすべて私には透過的でしたが、発生していて費用がかかりましたクエリに)。 2008年のiFTSはこの状況を改善しました。これは、データベースの統合により、複数のCONTAINSTABLE結果がクエリプランの一部になり、多くの検索がより効率的になるためです。

2005年と2008年の両方のFTSエンジンとLucene.NETには、多くのプロジェクトの状況に合わせて良くも悪くも調整されるアーキテクチャ上のトレードオフがあると思います。アップグレードがうまくいったのは幸運でした。 StackOverflow.comのようなユースケースの非常にOLTP性質)のために、2008年のiFTSが2005年のiFTSと同じ構成で機能しない理由を完全に理解できます。ただし、 2008 iFTSは、挿入トランザクションの重い負荷から切り離すことができます...しかし、それを達成するには、Lucene.NETに移行するのと同じくらい多くの作業が必要になる可能性があります...そしてLucene.NETのクールな要素は無視できません。 )

とにかく、私にとって、ほとんどの状況でのSQL 2008のiFTSの使いやすさと効率は、おそらくLuceneの「クール」な要素を打ち負かしています(使いやすいですが、実稼働システムで使用したことがないので、コメントを保留しますその上で)。 StackOverflowまたは同様の状況で、Luceneがどれほど効率的であるか(判明したか、現在実装されているか)を知ることは興味深いことです。

16
ZeroBugBounce

SQL Server FTSは、小規模な展開での管理が容易になります。 FTSはDBと統合されているため、RDBMSはインデックスの更新を自動的に処理します。ここでの欠点は、DBを複製する以外に明らかなスケーリングソリューションがないことです。したがって、スケーリングする必要がない場合は、SQL ServerFTSの方がおそらく「安全」です。政治的には、ほとんどのショップは純粋なSQLServerソリューションに慣れているでしょう。

Lucene側では、まっすぐなLuceneよりもSOLRを優先します。どちらのソリューションでも、データが変更されたときにインデックスを更新するだけでなく、データをSOLR/Luceneインデックスに自分でマッピングする作業を自分で行う必要があります。長所は、インデックスを追加することで簡単にスケーリングできることです。これらのインデックスは非常に無駄のないLinuxサーバーで実行できるため、ライセンスコストが削減されます。 Lucene/SOLRルートを使用する場合は、インデックス内のDBへのポインターを戻すのではなく、必要なすべてのデータを直接インデックスに入れることを目指します。検索できないデータをインデックスに含めることができるため、たとえば、事前に作成されたHTMLまたはXMLをインデックスに保存して、検索結果として提供することができます。このアプローチでは、DBがダウンしている可能性がありますが、切断モードでも検索結果を提供できます。

SQL Server 2008とLuceneのパフォーマンスを直接比較したことはありませんが、ぜひご覧ください。

19
Lee Harold

これは役立つかもしれません: http://blog.stackoverflow.com/2008/11/sql-2008-full-text-search-problems/

SQL Server 2008を個人的に使用したことはありませんが、そのブログエントリに基づくと、全文検索機能は2005年よりも遅いようです。

4
Mun

私たちは両方の全文検索の可能性を使用しますが、私の意見では、それはデータ自体とあなたのニーズに依存します。

私たちはWebサーバーでスケーリングします。したがって、SQLサーバーにそれほど負荷がかからないため、luceneが好きです。

nullから始めて全文検索をしたい場合は、sql-serverソリューションをお勧めします。結果を取得するのは非常に高速だと思うので、luceneが必要な場合は、開始時にさらに実装する必要があります(また、いくつかの知識を得る必要があります-どうやって)。

4
karlis

覚えておく必要のある考慮事項の1つは、全文制約に加えて、どのような種類の検索制約があるかです。 luceneが提供できない制約を実行している場合は、ほぼ確実にFTSを使用することをお勧めします。 2008の優れた点の1つは、FTSと標準のSQL Serverクエリとの統合が改善されたため、データベースとFTの制約が混在している場合のパフォーマンスが2005年よりも向上することです。

0
harmanjd