- ここにいる誰かが、NoSQLデータベースのいずれかで全文検索を行った実際のオンラインシステムを展開した経験がありますか?
- たとえば、フルテキスト検索はMongoDB、Riak、CouchDBでどのように比較されますか?
- 私が探している指標のいくつかは、展開と保守の容易さ、そしてもちろんスピードです。
- 彼らはどれくらい成熟していますか?それらはLuceneインフラストラクチャの代替品ですか?
10 に答える
既存の「NoSQL」データベースはどれも、「全文検索」と名付けられるような合理的な実装を提供していません。特に MongoDB には、これまでのところほとんど何もありません (正規表現を使用したマッチングは全文検索ではなく、キーワード ワード リストで $in または $all 演算子を使用した検索は、「全文検索」の非常に貧弱な実装です)。Solr、ElasticSearch、または Sphinx を使用するのは簡単です。つまり、アプリケーション レベルでの実装と統合です。選択は、要件と現在の設定によって大きく異なります。
はい。データのフル Lucene クエリをサポートする CouchDB 拡張機能であるCouchDB-Luceneを参照してください。
Solandra (Cassandra ベースの Apache Solr) を使用したアプリケーションの開発に携わっています。私の経験では、システムは非常に安定しており、TB+ データを処理できます。個人的には、次の理由でこのソフトウェアに非常に満足しています。 1. Cassandra バックエンドによるデータの自動分割。2. 豊富なクエリ機能 (Solr と Lucene による)。3. 読み取りと書き込みが高速です (書き込みは読み取りよりも大幅に高速です)。
ただし、現在、Solandra はバッチ ミューテーションをサポートしていないと思います。つまり、Cassandra への 1 回の挿入で 100 列を挿入できますが、Solandra はこれをサポートしていません。
MongoDB の場合、完全なフルテキスト インデックス作成機能はまだありませんが、おそらく v2.2 でパイプラインにある可能性があります。
当面は、文字列配列フィールドを使用してインデックスを配置することで、簡単な逆インデックスを作成できます。詳細については、Mongo での全文検索をご覧ください。
または、専用の Solr または Lucene インデックスで並列フルテキスト インデックスを維持することもできます。本当に野心的な場合は、Mongo oplog からフルテキスト ストアに直接レプリケートします。それ以外の場合は、両方にデータを入力して、アプリケーション ロジックからの同期を維持します。
Sphinx Searchに全文エンジンを持ちながら、 MongoDBに保存されているデータを使用して、これを完了しました。mongo には、将来のリリースにフルテキストを追加するための投票可能な問題があることを知っています。ただし、現時点では持っていません。
Mongo 情報を sphinx に挿入する方法はいくつかあります。ただし、私が最もうまくいった(そして非常に簡単だった)のは、xmlpipe2を使用することです。これを使用する方法を完全に理解するには少し時間がかかりました。ただし、この記事: Sphinx xmlpipe2 in PHPには、(少なくとも PHP で) ドキュメントを作成する方法と、それを sphinx に挿入する方法を示す優れたウォークスルーがあります。
基本的に、私の設定は次のようになります。
source my_source {
type = xmlpipe
xmlpipe_command = /usr/bin/php /www/generateSphinXml.php identifierForMyTable
}
私のインデックスでは、次のようになります。
index my_index {
source = my_source
path = /usr/local/sphinx/var/data/my_index
docinfo = extern
min_word_len = 1
mlock = 0
morphology = stem_en
charset_type = utf-8 //<----- This is q requirement however.
enable_star = 1
html_strip = 0
min_prefix_len = 2
}
私はこれで素晴らしい成功を収めました。うまくいけば、これが役に立つと思います。
Solr は 10gen の Mongo Connector と一緒に使用でき、そこにデータをプッシュすることができます (とりわけ)。
https://github.com/10gen-labs/mongo-connector/tree/master/mongo-connector
彼らの例から:
python mongo_connector.py -m localhost:27217 -t http://localhost:8080/solr
PHP を使用している場合は、MongoLantern という名前の No-SQL データベース MongoDB で全文検索を行うための優れたソリューションがあります。http://sourceforge.net/projects/mongolantern/
以前は Sphinx + MongoDB を使用して全文検索を実行していましたが、パフォーマンスは優れていましたが、結果の品質は非常に悪かったです。MongoLantern を使用すると、現在の検索が大幅に改善されました。
MongoLantern は MongoDB サイトにもリストされています。
自分で試してみたら教えてください。
クランプロジェクト。上記以外のxapianも。私は Sphinx を使用しています。これは非常に優れていますが、セットアップが少し面倒です。実際には、sphinx.conf ファイルで Sphinx の SQL を使用するよりも、XMLPIPE2 を介して Mongo から Sphinx にデータをパイプすることを好みます。
恐るべしソル。NoSQLです。
それは持っています:
- 素晴らしいパフォーマンス
- 素晴らしいストレージオプション
- ステマー
- ハイライト
- 面取り
- 分散検索 (SolrCloud)
- 完璧なAPI
- ウェブ管理者
- HTML、PDF、DOC インデックス作成
- その他多くの機能