昨日はYii FrameworkからMongoDBに接続してみましたが、
今日はYii FrameworkからSolrに繋いでみます。
#なんとなく感覚的にはRDBMSとMongoDBとSolrが使えれば、それっぽいサービス作れるのかな、と。
YiiのページでSolrのExtensionを探してみると、以下2つがヒットします。
– solr(http://www.yiiframework.com/extension/solr)
– yii-solr(http://www.yiiframework.com/extension/yii-solr)
yii-solrの方が新しいしFollowerも多いので、今回はyii-solrを試してみます。
■ Solrのインストール
サンプルを動かすだけならSolrのページ(http://lucene.apache.org/solr/)から
アーカイブをダウンロードしてきて、解凍してサンプルに移動して
↓のようにjava -jar start.jarするだけです。非常に簡単。
C:>cd C:apache-solr-3.6.0example
C:apache-solr-3.6.0example>java -jar start.jar
2012-06-13 10:50:25.199:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
2012-06-13 10:50:25.327:INFO::jetty-6.1-SNAPSHOT
6 13, 2012 10:50:26 午前 org.apache.solr.core.SolrResourceLoader locateSolrHome
■ yii-solrのインストール
yii-solrのGithubページ(https://github.com/phpnode/YiiSolr)のReadmeに
やり方が記載されています。
昨日もそうでしたが、peclが動いてくれないので、、
http://downloads.php.net/pierre/ から php_solr-5.3 っていうリンクの
アーカイブ落としてきて解凍してxampp/php/extに配置します。
続いて、プロジェクトのルートディレクトリ直下にpackagesというディレクトリを作成して、
main.phpでaliasしなさいと。
"aliases" => array( "packages" => dirname(__DIR__)."/packages/", ),
packages/solrにファイルを展開しろとのことなのでそうします。
とりあえずインストールは完了した予感です。
■ YiiからSolrに接続(1)
ReadmeはTDDな感じで記載されていて、testディレクトリから↓叩け、と。
「先生、テストディレクトリがありません!」って感じなんですがww
phpunit --verbose ../packages/solr/tests
ってかPHPUnitするのにPHPのエクステンションが必要って話なので↓
C:YYYxamppphp>pear install phpunit/PHPUnit-beta
WARNING: channel “pear.phpunit.de” has updated its protocols, use “channel-update pear.phpunit.de” to update
Did not download optional dependencies: phpunit/PHP_Invoker, use –alldeps to download automatically
phpunit/PHPUnit requires PEAR Installer (version >= 1.9.4), installed version is 1.7.2
phpunit/PHPUnit can optionally use package “phpunit/PHP_Invoker” (version >= 1.1.0)
~略~
Starting to download YAML-1.0.6.tgz (10,010 bytes)
…..done: 10,010 bytes
install ok: channel://pear.symfony-project.com/YAML-1.0.6
■ YiiでPHPUnitしてみる
YiiのTestingの2. Test Environment Setupを読むと、
yiicでプロジェクト作ると、Test用のディレクトリが出来るはずだって書いてある…。
↓やってみるとソレっぽいのが出来たっぽいです。
C:YYYeclipse-phpworkspaceYYY>C:YYYxamppphpphp.exe C:YYYeclipse-phpworkspaceYYYyii-1.1.10.r3566frameworkyi ic.php webapp testdrive Create a Web application under 'C:YYYeclipse-phpworkspaceYYYtestdrive'? [yes|no] yes mkdir C:/YYY/eclipse-php/workspace/YYY/testdrive mkdir C:/YYY/eclipse-php/workspace/YYY/testdrive/assets mkdir C:/YYY/eclipse-php/workspace/YYY/testdrive/css ~略~ mkdir C:/YYY/eclipse-php/workspace/YYY/testdrive/themes/classic/views/layouts mkdir C:/YYY/eclipse-php/workspace/YYY/testdrive/themes/classic/views/site mkdir C:/YYY/eclipse-php/workspace/YYY/testdrive/themes/classic/views/system Your application has been created successfully under C:YYYeclipse-phpworkspaceYYYtestdrive.
画面からアクセスしてみると↓
↓エクスプローラーから見た感じテストディレクトリもOKそう
が、テストしてみると↓Selenium RC serverが、、、って悲しい事になってますw
C:YYYeclipse-phpworkspaceYYYtestdriveprotectedtests>C:YYYxamppphpphpunit.bat functional/SiteTest.php PHPUnit 3.5.14 by Sebastian Bergmann. EEEEEE Time: 13 seconds, Memory: 5.25Mb There were 6 errors: 1) SiteTest::testIndex PHPUnit_Framework_Exception: Could not connect to the Selenium RC server.
■ YiiSolrでPHPUnit
んま、とりあえず先進むべって事で、上記で作ったpackagesディレクトリを
testdriveの方に持ってくることにしました。main.phpも書き換えておきます。
ってことで、YiiSolrでPHPUnitを試みます。
↓ことごとくNo such file or directoryで落ちてる…orz
C:YYYeclipse-phpworkspaceYYYtestdriveprotectedtests>C:YYYxamppphpphpunit.bat --verbose ../packages/solr/test PHPUnit 3.5.14 by Sebastian Bergmann. .EEEEEEEE...EEEEEEEEEEEEEE Time: 0 seconds, Memory: 8.25Mb There were 22 errors: 1) ASolrConnectionTest::testIndexAndDelete include(SolrInputDocument.php): failed to open stream: No such file or directory C:YYYeclipse-phpworkspaceYYYyii-1.1.10.r3566frameworkYiiBase.php:418 C:YYYeclipse-phpworkspaceYYYyii-1.1.10.r3566frameworkYiiBase.php:418 C:YYYeclipse-phpworkspaceYYYtestdriveprotectedpackagessolrtestsASolrConnectionTest.php:32 2) ASolrConnectionTest::testFacetedSearch include(SolrInputDocument.php): failed to open stream: No such file or directory
そういえばphp.iniにextension=php_solr.dll入れるの忘れてた。。
って事で、追記してもっかい走らせたら、今度はCurlがないとか…↓
php_curl.dllもダウンロードしてきてphp.iniに追記してもっかい。
↓久しぶりに気持ちイイ感じ。
C:YYYeclipse-phpworkspaceYYYtestdriveprotectedtests>C:YYYxamppphpphpunit.bat --verbose ../packages/solr/tests PHPUnit 3.5.14 by Sebastian Bergmann. .......................... Time: 8 seconds, Memory: 14.50Mb OK (26 tests, 3119 assertions)
■ YiiからSolrに接続(2)
main.phpのcomponentsの所にに↓の定義を追加します。
"solr" => array( "class" => "packages.solr.ASolrConnection", "clientOptions" => array( "hostname" => "localhost", "port" => 8983, ), ),
#最初、うっかり一番下に追記したら”CWebApplication.solr” is not defined.
#って言われて焦りました。記述するのはcomponentsの中です。
んま、そんなこんなで、SiteControllerのactionIndexに↓のコードを突っ込んで、
$doc = new ASolrDocument; $doc->id = 123456789; $doc->name = "hoge document"; $doc->save(); // adds the document to solr $doc->getSolrConnection()->commit();
でもって画面から叩いたら、そんなクラスねぇみたいな事いわれて。
何かと思ったら、main.phpでpackagesを宣言するところが、
Solr関連のimportするとこより前にないとダメじゃんっていう。
↓こんな感じで。
'aliases' => array( 'packages' => dirname(__DIR__).'/packages/', ), // autoloading model and component classes 'import'=>array( 'application.models.*', 'application.components.*', 'packages.solr.*', ),
最終的に画面から叩いた後にSolrの管理画面みると、、、
↓無事入っておりましたとさ。
めでたしめでたし。
#ってか、そもそものYiiのお勉強をもうちょいしないとなw
技術評論社
売り上げランキング: 38211
コメント