OPの質問に答えるのとは別に、簡単な紹介から詳細なインストールと実装まで、 Apache Solrに関するいくつかの洞察を投げかけましょう。
簡単な紹介
上記の検索エンジン、またはリストにない他のエンジンを使用した経験のある方なら誰でも、ご意見をお待ちしております。
リアルタイムの問題を解決するためにSolrを使用しないでください。検索エンジンにとって、Solrはほとんどゲームであり、問題なく動作します。
Solrはトラフィックの多い Web アプリケーションで問題なく動作します (これには適していないことをどこかで読みましたが、その声明を裏付けています)。CPUではなくRAMを使用します。
ブーストは、結果を上位にランク付けするのに役立ちます。たとえば、フィールドfirstnameおよびlastnameで名前johnを検索しようとしており、 firstnameフィールドに関連性を持たせたい場合は、示されているようにfirstnameフィールドをブーストする必要があります。
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
ご覧のとおり、firstnameフィールドはスコア 2 でブーストされています。
SolrRelevancyの詳細
速度は信じられないほど速く、妥協はありません。Solrに移行した理由。
インデックス作成の速度に関しては、Solrはデータベース テーブルからのJOINSも処理できます。より高度で複雑なJOINは、インデックス作成の速度に影響します。ただし、膨大なRAM構成を使用すると、この状況に簡単に対処できます。
RAM が大きいほど、Solr のインデックス作成速度が速くなります。
SolrとDjangoを統合しようとしたことはありませんが、Haystackを使用すると実現できます。同じことに関する興味深い記事を見つけました。これはgithubです。
- リソース要件 - サイトは VPS でホストされるため、理想的には検索エンジンは大量の RAM と CPU を必要としません。
Solrは RAM で繁殖するため、RAM が高い場合はSolrについて心配する必要はありません。
数十億のレコードがある場合、Solr のRAM 使用量は完全なインデックス作成で急上昇します。デルタ インポートを賢く利用して、この状況に対処することができます。説明したように、Solr はほぼリアルタイムのソリューションにすぎません。
Solrは非常にスケーラブルです。SolrCloudをご覧ください。それのいくつかの重要な機能。
- シャード (またはシャーディングは、インデックスが大きくなりすぎた場合など、複数のマシンにインデックスを分散する概念です)
- ロード バランシング ( Solrjが Solr クラウドで使用されている場合、Solrj はラウンド ロビン メカニズムを使用して自動的にロード バランシングを処理します)
- 分散検索
- 高可用性
上記のシナリオでは、 Solrに同梱されているSpellCheckComponentを使用できます。他にも多くの機能があります。SnowballPorterFilterFactoryは、 bookの代わりにbooksと入力すると、 bookに関連する結果が表示されるなど、レコードを取得するのに役立ちます。
この回答は、広くApache SolrとMySQLに焦点を当てています。Django は対象外です。
あなたが LINUX 環境にいると仮定すると、この記事の先に進むことができます。(私のものはUbuntu 14.04バージョンでした)
詳細なインストール
入門
ここからApache Solrをダウンロードします。バージョンは4.8.1になります。新しいバージョンをダウンロードできます。これは安定しています。
アーカイブをダウンロードしたら、任意のフォルダーに解凍します。.. Downloads
または何でも..と言うと、次のようになりますDownloads/solr-4.8.1/
プロンプトで..ディレクトリ内を移動します
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
だから今あなたはここにいます..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Jetty アプリケーション サーバーを起動する
Jettyはsolr-4.8.1
ディレクトリの examples フォルダー内で使用できるので、その中を移動して Jetty アプリケーション サーバーを起動します。
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
ここで、ターミナルを閉じず、最小化して脇に置いておきます。
(ヒント: start.jar の後に & を使用して、Jetty サーバーをバックグラウンドで実行します)
Apache Solrが正常に実行されるかどうかを確認するには、ブラウザーでこの URL にアクセスします。http://localhost:8983/solr
カスタム ポートで Jetty を実行する
デフォルトではポート 8983 で実行されます。ここで、またはjetty.xml
ファイル内で直接ポートを変更できます。
java -Djetty.port=9091 -jar start.jar
Jコネクタをダウンロード
この JAR ファイルは、MySQLと JDBC の間のブリッジとして機能します。プラットフォームに依存しないバージョンをここからダウンロードしてください。
ダウンロード後、フォルダを解凍してコピーし、 libディレクトリmysql-connector-java-5.1.31-bin.jar
に貼り付けます。
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Apache Solr にリンクする MySQL テーブルの作成
Solrを使用するには、検索するテーブルとデータが必要です。そのために、MySQLを使用してテーブルを作成し、いくつかのランダムな名前をプッシュします。その後、Solrを使用してMySQLに接続し、そのテーブルとそのエントリのインデックスを作成できます。
1.表の構造
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2.上記の表に入力します
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
コアの内部に入り、lib ディレクティブを追加する
1.ナビゲート
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2.solrconfig.xmlの修正
これら 2 つのディレクティブをこのファイルに追加します。
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
ここで、 DIH (データ インポート ハンドラー)を追加します。
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3.db-data-config.xml ファイルを作成する
ファイルが存在する場合は無視して、これらの行をそのファイルに追加します。最初の行からわかるように、MySQLデータベースの認証情報を提供する必要があります。データベース名、ユーザー名、およびパスワード。
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(ヒント:エンティティはいくつでも持つことができますが、id フィールドに注意してください。それらが同じ場合、インデックス作成はスキップされます。)
4.schema.xmlファイルを修正する
示されているように、これをschema.xmlに追加します。
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
実装
索引付け
これが本当の取引です。Solr クエリを利用するには、 MySQLからSolrへのデータのインデックス作成を行う必要があります。
ステップ 1: Solr 管理パネルに移動します。
ブラウザーで URL http://localhost:8983/solrにアクセスします。こんな感じで画面が開きます。

マーカーが示すように、上記の構成のいずれかがエラーを引き起こしているかどうかを確認するには、[ログ] に移動します。
ステップ 2: ログを確認する
わかりましたので、ここに来ました。黄色のメッセージ (警告) がたくさんあります。赤でマークされたエラー メッセージがないことを確認します。以前の構成で、db-data-config.xmlに選択クエリを追加しました。たとえば、そのクエリにエラーがあった場合、ここに表示されます。

エラーはありません。準備万端です。図のようにリストからcollection1を選択し、 Dataimportを選択します。
ステップ 3: DIH (データ インポート ハンドラー)
DIH を使用して、 Solrインターフェイスから構成ファイルdb-data-config.xmlを介してSolrからMySQLに接続し、 Solrにインデックス付けされたデータベースから 10 個のレコードを取得します。
これを行うには、full-importを選択し、オプションCleanおよびCommitをチェックします。次に、図のように [実行] をクリックします。
または、このような直接の完全インポートクエリを使用することもできます。
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true

Executeをクリックすると、Solrはレコードのインデックス作成を開始します。エラーがあった場合は、Indexing Failedと表示され、 Loggingセクションに戻って何が問題なのかを確認する必要があります。
この構成にエラーがなく、インデックス作成が正常に完了した場合、この通知が表示されます。

ステップ 4: Solr クエリの実行
これで、 Solrクエリを使用して、インデックスが作成されたデータをクエリできるようになりました。左側のクエリをクリックし、下部の実行ボタンを押します。
示されているように、索引付けされたレコードが表示されます。
すべてのレコードを一覧表示するための対応するSolrクエリは次のとおりです。
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true

さて、10 のインデックス付きレコードがすべて表示されます。たとえば、 Jaで始まる名前のみが必要です。この場合、列 name をターゲットにする必要がありますsolr_name
。したがって、クエリは次のようになります。
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true

それがSolrクエリの書き方です。詳細については、この美しい記事をご覧ください。