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
あなたが見ることができるように、ファーストネームフィールドがされてブースト 2のスコアをアップ。
SolrRelevancyの詳細
スピードは信じられないほど速く、妥協はありません。私がSolrに引っ越した理由。
インデックス作成速度に関して、SolrはデータベーステーブルからのJOINSも処理できます。より高く複雑なJOINは、インデックス作成速度に影響します。ただし、巨大なRAM構成はこの状況に簡単に対処できます。
RAMが大きいほど、Solrのインデックス作成速度は速くなります。
SolrとDjangoを統合しようとしたことはありませんが、Haystackを使用してそれを実現することができます。私は同じことに関していくつかの興味深い記事を見つけました、そしてそれはそれのためのgithubです。
- リソース要件-サイトはVPSでホストされるため、理想的には検索エンジンが大量のRAMとCPUを必要としない
SolrはRAMで繁殖するため、RAMが高い場合でも、Solrについて心配する必要はありません。
数十億のレコードがある場合、Solrの RAM使用量はフルインデックス作成で急激に増加します。Deltaインポートをうまく活用して、この状況に対処できます。説明したように、Solr はほぼリアルタイムのソリューションにすぎません。
Solrは非常にスケーラブルです。上を見ていSolrCloudを。それのいくつかの主要な機能。
- シャード(またはシャーディングは、インデックスが大きくなりすぎた場合など、複数のマシンにインデックスを分散させる概念です)
- 負荷分散(SolrjをSolrクラウドで使用する場合、ラウンドロビンメカニズムを使用して自動的に負荷分散を処理します)
- 分散検索
- 高可用性
上記のシナリオでは、Solrに組み込まれているSpellCheckComponentを使用できます。多くの他の機能がありますが、SnowballPorterFilterFactoryは、レコードは、あなたが入力した場合、言っ取得するのに役立ちますブックの代わりに、この本は、あなたがに関連する結果が表示されますブック。
この回答は、広く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 Application Serverを起動します
Jettyはsolr-4.8.1
ディレクトリのexamplesフォルダー内で使用できるため、その中を移動してJetty Application Serverを起動します。
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
JConnectorをダウンロードする
このJARファイルは、MySQLとJDBCの間のブリッジとして機能します。プラットフォームに依存しないバージョンをここからダウンロードします
ダウンロード後、フォルダを抽出してコピーmysql-connector-java-5.1.31-bin.jar
し、libディレクトリに貼り付けます。
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を使用すると、に接続されるのMySQLからSolrの構成ファイルをDB-データ-config.xmlのからのSolrインターフェースと上にインデックスを付けますデータベースから10レコードを取得してSolr。
これを行うには、[ 全インポート]を選択し、[ クリーンアップとコミット]オプションをオンにします。次に示すように、[ 実行 ]をクリックします。
または、このような直接のフルインポートクエリを使用することもできます。
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
[ 実行]をクリックすると、Solrはレコードのインデックス作成を開始します。エラーが発生した場合は、[ インデックス作成に失敗しました]と表示され、何が問題かを確認するには、[ ログ]セクションに戻る必要があります。
この構成にエラーがないと仮定し、インデックス作成が正常に完了した場合は、この通知が表示されます。
ステップ4:Solrクエリを実行する
すべてがうまくいったようですが、Solrクエリを使用して、インデックス付けされたデータをクエリできます。左側のクエリをクリックし、下部の実行ボタンを押します。
次のように、インデックス付けされたレコードが表示されます。
すべてのレコードをリストするための対応するSolrクエリは
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
さて、10個すべてのインデックス付きレコードがあります。たとえば、Jaで始まる名前だけが必要であるとします。この場合、列名をターゲットにする必要があるsolr_name
ため、クエリは次のようになります。
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
それがSolrクエリの書き方です。詳しくは、こちらの美しい記事をご覧ください。