ここのところ、最近改訂版が出た↓のApache Solr入門を読んでいるのですが、
sortMissingLastの設定とか、カタカナのステミング(例:サーバー⇒サーバ)とか、omitNormsが〜とか、
実際に手を動かして試してみたいものの、手でJSONやXMLを書くのも面倒くさすぎる、、ということで、
Chapter5 の クライアントプログラミング から進めていきたいと思います。
技術評論社
売り上げランキング: 6,004
■ SolrJ依存ライブラリ
以前Tomcat上に構築したSolrのログ出力に関して使うjarファイルをまとめたことがあるのですが、
Solr用のクライアントライブラリであるSolrJにおいてもいろいろ必要になります。
まずはSolr本体をダウンロードして解凍します。
$ curl -O http://www.dsgnwrld.com/am/lucene/solr/4.6.0/solr-4.6.0.tgz $ tar xvf solr-4.6.0.tgz $ cd solr-4.6.0/dist/solrj-lib
ココには以下のjarファイルが入っています。
#若干書籍とバージョン変わっていますが、on goingなプロダクトなので。。。
– commons-io-2.1.jar
– httpclient-4.2.6.jar
– httpcore-4.2.5.jar
– httpmime-4.2.6.jar
– jcl-over-slf4j-1.6.6.jar
– jul-to-slf4j-1.6.6.jar
– log4j-1.2.16.jar
– noggit-0.5.jar
– slf4j-api-1.6.6.jar
– slf4j-log4j12-1.6.6.jar
– wstx-asl-3.2.7.jar
– zookeeper-3.4.5.jar
で、実際の動作には slf4j-jdk14-1.6.6.jar が必要なのだそうです。
■ SolrJ実行環境
Java屋な自分としてはEclipseでMavenプロジェクトを作って、SolrJを叩けるmain文なプログラムを作ってみます。
上記のjarファイルの依存に関してはpom.xmlを↓に置いておいたのでご参考まで。
https://github.com/shinodogg/TrySolrJ/blob/master/pom.xml
SolrJでは、SolrServerというクラスを介してSolrとのやりとりを行うわけですが、
実装クラスは以下のようになっています。
– HttpSolrServer
– EmbeddedSolrServer
– LBHttpSolrServer
– CloudSolrServer
– ConcurrentUpdateSolrServer
↓3年以上前は上から3つまでしかなかったのですが、クラウドやコンカレントといったクラスが追加されています。
今回は一番ベーシックな HttpSolrServer で試してみます。
■ スキーマ設定とデータ投入
こちらはApache Solr入門のChapter2とChapter3を元にして行っていきます。
Solrは普通に内包されているJettyで起動できることを確認後落としておいて、
$ java -jar start.jar 0 [main] INFO org.eclipse.jetty.server.Server – jetty-8.1.10.v20130312 29 [main] INFO org.eclipse.jetty.deploy.providers.ScanningAppProvider – Deployment monitor /Users/eshinoha/solr/solr-4.6.0/example/contexts at interval 0 36 [main] INFO org.eclipse.jetty.deploy.DeploymentManager – Deployable added: /Users/eshinoha/solr/solr-4.6.0/example/contexts/solr-jetty-context.xml
solrbookディレクトリを作って、collection1からconfをコピって、
技評のサポートページからダウンロードしたsolrbook.zipのconfもコピって、
もう一度、Solrを起動します。
$ mkdir solrbook $ cp -r collection1/conf solrbook/ $ cp -r /Users/xxx/Downloads/solrbook/sampledata/solrbook/conf/* solrbook/conf/ $ cd ../ $ java -jar start.jar
↓のようにAdd Coreしてやります。
でもって、そこにデータ投入してコミットします。
$ curl http://localhost:8983/solr/solrbook/update --data-binary @sample-books.xml -H 'Content-type:text/xml;charset=utf-8' <?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"><int name="status">0</int><int name="QTime">4171</int></lst> </response> $ curl http://localhost:8983/solr/solrbook/update?commit=true <?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"><int name="status">0</int><int name="QTime">1059</int></lst> </response>
↓のようにデータが入ったことを確認出来ました。
■ Javaプログラムからデータ投入
Eclipse&Mavenで環境作って、ローカルにサーバー立てて、スキーマ定義して、データ投入して、、
いよいよJavaのプログラムを実行してみます。
public static void main( String[] args ) throws SolrServerException, IOException { String url = "http://localhost:8983/solr/solrbook"; SolrServer server = new HttpSolrServer(url); SolrInputDocument document = new SolrInputDocument(); document.addField("url","http://gihyo.jp/ThisIsSample1"); document.addField("title","はじめてのSolr"); String[] authors = {"山田太郎", "鈴木一郎"}; document.addField("author", authors); document.addField("summary", "この書籍はフィクションです"); server.add(document); server.commit(); }
↓こんな感じ。
■ Javaプログラムから検索
上記のSolrServerを使う感じで↓のように検索できます。
SolrQuery query = new SolrQuery(); query.setQuery("山田太郎"); QueryResponse res = server.query(query); for(SolrDocument document : res.getResults()) { for(String name : document.getFieldNames()) { System.out.println(name + ": " + document.get(name)); } System.out.println("----------"); }
↓結果はこんな感じ。
url: http://gihyo.jp/ThisIsSample1 title: はじめてのSolr author: [山田太郎, 鈴木一郎] summary: [この書籍はフィクションです] _version_: 1454018793066987520 ---------- summary: [1冊で言語仕様から最新の技術までを網羅した内容。網羅的に解説されているだけでなく,各技術に関しては基本からしっかり解説し,フレームワークなどを利用したWebアプリケーション開発の解説などは,内部処理が裏で何をしているのかを掘り下げて解説してあるため,PHPを体系的に学びたい方はもちろん,より深い知識を得たい中~上級者にもお勧めの一冊である。] genre: [プログラミング・システム開発, JavaScript・Perl・Ruby・PHPなど] author: [小川雄大, 柄沢聡太郎, 橋口誠] title: パーフェクトPHP intended_reader: [PHPで仕事をしているエンジニア, PHPでWebアプリケーション開発をしているエンジニア] price: 3780 pub_date: 20101112 isbn: 978-4-7741-4437-5 pages: 592 url: http://gihyo.jp/book/2010/978-4-7741-4437-5 _version_: 1454017832355364864 ---------- summary: [サーバについて,実用的な知識を学習するために役に立つ解説書です。国内最大規模のシステムを構築運用し,ITProでもサーバ管理者日記を連載している佐野裕氏をはじめ,サーバ運用経験豊富な著者達が,実際に現場で「このくらいは知っていて欲しい」と思われる知識をまとめました。, それぞれの項目について具体的な例を挙げながら,それが何のために必要なのかを含めて解説します。サーバとは何かといった入門から,サーバをとりまくネットワーク環境の学習書として広くお使いいただけます。] genre: [ネットワーク・UNIX・データベース, サーバ・LAN・公衆無線LAN] author: [小島太郎, 佐藤尚孝, 佐野裕] title: これだけは知っておきたい サーバの常識 intended_reader: [サーバを初めて学習する学生の教材として, SE やシステム管理者など,ネットワーク/サーバ携わる人の全般的な知識の向上, 各種サーバを利用しているユーザが仕組みを理解するために] price: 1764 pub_date: 20091028 isbn: 978-4-7741-4039-1 pages: 184 url: http://gihyo.jp/book/2009/978-4-7741-4039-1 _version_: 1454017833702785024 ---------- summary: [プログラミング言語をやさしく解説する「今すぐ使えるかんたんプラス」シリーズのデータベース編です。これからMySQLを始める人のために,データベースおよびMySQLの基本を徹底解説します。実際にMySQLの操作を行いながら,予習→体験→理解の3つのプロセスを踏むことで,MySQLの基礎がしっかり,やさしく身に付きます! 「今すぐ使えるかんたんプラス 3ステップでしっかり学ぶ Oracle入門」も同時発売です。] genre: [ネットワーク・UNIX・データベース, データベース・SQLなど] author: [山田祥寛, 山田奈美] 〜略〜
■ ということで、、
プログラムからデータを投入したり、検索したりといったところが出来るようになったので、
これから手動かしながら検証進めたいと思います。
技術評論社
売り上げランキング: 3,804
コメント
[…] みます。 先日 SolrJを使ったクライアントプログラミングのブログを書きましたが⇒http://shinodogg.com/?p=5899 ソレを活用してやってみます。 インデクシングするコードは↓こんな感じ。 […]
[…] ■ Search Data Format (SDF) Amazon CloudSearchでデータをインデクシングするのにSDFというフォーマット(JSONもしくはXML)で データをアップロードする必要がありますが、2014年1月現在、以下の方法があります。 1. コマンドラインツールをインストールしてcs-import-documentsコマンドを使う 2. ManagementConsoleでブラウザからポチポチする 3. DocumentEndpointに直接curl等でPOSTする SDFフォーマット的には↓に詳しく記載されていますが、 http://aws.amazon.com/articles/8871401284621700#_Ref198105621 以下のような情報が必要な感じになります。 – 操作種別(add/delete) – 一意の識別子 – バージョン番号 – 言語コード(en) – 実際のフィールドとデータ ■ SDKを使って開発しているのでその中でやりくりしたい 先日、Solrをイジっていて、SolrJでクライアントプログラミングしてみました(http://shinodogg.com/?p=5899)が、 ソレと同じようなノリで、Javaのオブジェクトを作って、そのままインデクシングしたいな、と。 ■ まずはAmazon CloudSearchに検索サーバーを準備してSDKからアクセス CloudSearchにDomainを定義します。 (後からtextフィールドもresultのチェック入れましたが、件数なくてもActiveになるまでそこそこ時間かかります) JavaのSDKのCloudSearchなクラスを使ってアクセスしてみます。 – CloudSearchのクライアント。リージョンはVirginia(まだ日本にきてないので) […]