Php/docs/solr.examples

提供:Dev Guides
< Php
移動先:案内検索

PHP で Apache Solr エクステンションを使用する方法の例

例1 ブートストラップ・ファイルの内容

<?php/* Solr サーバーのドメイン名 */define('SOLR_SERVER_HOSTNAME', 'solr.example.com');/* セキュアなモードで動作するかどうか */define('SOLR_SECURE', true);/* 接続する HTTP ポート */define('SOLR_SERVER_PORT', ((SOLR_SECURE) ? 8443 : 8983));/* HTTP Basic 認証ユーザー名 */define('SOLR_SERVER_USERNAME', 'admin');/* HTTP Basic 認証パスワード */define('SOLR_SERVER_PASSWORD', 'changeit');/* HTTP 接続タイムアウト *//* HTTP データ転送動作に許される、秒単位の最大時間。既定値は30秒 */define('SOLR_SERVER_TIMEOUT', 10);/* PEM 形式のプライベートキーとプライベート証明書に対するファイル名(その順序で連結されます) */define('SOLR_SSL_CERT', 'certs/combo.pem');/* PEM 形式のプライベート証明書のみに対するファイル名 */define('SOLR_SSL_CERT_ONLY', 'certs/solr.crt');/* PEM 形式のプライベートキーに対するファイル名 */define('SOLR_SSL_KEY', 'certs/solr.key');/* PEM 形式のプライベートキー・ファイルに対するパスワード */define('SOLR_SSL_KEYPASSWORD', 'StrongAndSecurePassword');/* 同等であることを証明する、一つ以上の CA 証明書を持つファイル名 */define('SOLR_SSL_CAINFO', 'certs/cacert.crt');/* 同等であることを証明する、複数の CA 証明書があるディレクトリ名 */define('SOLR_SSL_CAPATH', 'certs/');?>

例2 インデックスに文書を追加

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$doc = new SolrInputDocument();$doc->addField('id', 334455);$doc->addField('cat', 'Software');$doc->addField('cat', 'Lucene');$updateResponse = $client->addDocument($doc);print_r($updateResponse->getResponse());?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 446
        )

)

例3 ある文書を他の文書にマージ

<?phpinclude "bootstrap.php";$doc = new SolrDocument();$second_doc = new SolrDocument();$doc->addField('id', 1123);$doc->features = "PHP Client Side";$doc->features = "Fast development cycles";$doc['cat'] = 'Software';$doc['cat'] = 'Custom Search';$doc->cat   = 'Information Technology';$second_doc->addField('cat', 'Lucene Search');$second_doc->merge($doc, true);print_r($second_doc->toArray());?>

上の例の出力は、 たとえば以下のようになります。


Array
(
    [document_boost] => 0
    [field_count] => 3
    [fields] => Array
        (
            [0] => SolrDocumentField Object
                (
                    [name] => cat
                    [boost] => 0
                    [values] => Array
                        (
                            [0] => Software
                            [1] => Custom Search
                            [2] => Information Technology
                        )

                )

            [1] => SolrDocumentField Object
                (
                    [name] => id
                    [boost] => 0
                    [values] => Array
                        (
                            [0] => 1123
                        )

                )

            [2] => SolrDocumentField Object
                (
                    [name] => features
                    [boost] => 0
                    [values] => Array
                        (
                            [0] => PHP Client Side
                            [1] => Fast development cycles
                        )

                )

        )

)

例4 文書を検索 - SolrObject レスポンス

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$query = new SolrQuery();$query->setQuery('lucene');$query->setStart(0);$query->setRows(50);$query->addField('cat')->addField('features')->addField('id')->addField('timestamp');$query_response = $client->query($query);$response = $query_response->getResponse();print_r($response);?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 1
            [params] => SolrObject Object
                (
                    [wt] => xml
                    [rows] => 50
                    [start] => 0
                    [indent] => on
                    [q] => lucene
                    [fl] => cat,features,id,timestamp
                    [version] => 2.2
                )

        )

    [response] => SolrObject Object
        (
            [numFound] => 3
            [start] => 0
            [docs] => Array
                (
                    [0] => SolrObject Object
                        (
                            [cat] => Array
                                (
                                    [0] => Software
                                    [1] => Lucene
                                )

                            [id] => 334456
                        )

                    [1] => SolrObject Object
                        (
                            [cat] => Array
                                (
                                    [0] => Software
                                    [1] => Lucene
                                )

                            [id] => 334455
                        )

                    [2] => SolrObject Object
                        (
                            [cat] => Array
                                (
                                    [0] => software
                                    [1] => search
                                )

                            [features] => Array
                                (
                                    [0] => Advanced Full-Text Search Capabilities using Lucene
                                    [1] => Optimized for High Volume Web Traffic
                                    [2] => Standards Based Open Interfaces - XML and HTTP
                                    [3] => Comprehensive HTML Administration Interfaces
                                    [4] => Scalability - Efficient Replication to other Solr Search Servers
                                    [5] => Flexible and Adaptable with XML configuration and Schema
                                    [6] => Good unicode support: hello (hello with an accent over the e)
                                )

                            [id] => SOLR1000
                            [timestamp] => 2009-09-04T20:38:55.906
                        )

                )

        )

)

例5 文書を検索 - SolrDocument レスポンス

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$query = new SolrQuery();$query->setQuery('lucene');$query->setStart(0);$query->setRows(50);$query->addField('cat')->addField('features')->addField('id')->addField('timestamp');$query_response = $client->query($query);$query_response->setParseMode(SolrQueryResponse::PARSE_SOLR_DOC);$response = $query_response->getResponse();print_r($response);?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 1
            [params] => SolrObject Object
                (
                    [wt] => xml
                    [rows] => 50
                    [start] => 0
                    [indent] => on
                    [q] => lucene
                    [fl] => cat,features,id,timestamp
                    [version] => 2.2
                )

        )

    [response] => SolrObject Object
        (
            [numFound] => 3
            [start] => 0
            [docs] => Array
                (
                    [0] => SolrDocument Object
                        (
                            [_hashtable_index:SolrDocument:private] => 19740
                        )

                    [1] => SolrDocument Object
                        (
                            [_hashtable_index:SolrDocument:private] => 25485
                        )

                    [2] => SolrDocument Object
                        (
                            [_hashtable_index:SolrDocument:private] => 25052
                        )

                )

        )

)

例6 簡単な TermsComponent 例 - 基本

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$query = new SolrQuery();$query->setTerms(true);$query->setTermsField('cat');$updateResponse = $client->query($query);print_r($updateResponse->getResponse());?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 2
        )

    [terms] => SolrObject Object
        (
            [cat] => SolrObject Object
                (
                    [electronics] => 14
                    [Lucene] => 4
                    [Software] => 4
                    [memory] => 3
                    [card] => 2
                    [connector] => 2
                    [drive] => 2
                    [graphics] => 2
                    [hard] => 2
                    [monitor] => 2
                )

        )

)

例7 簡単な TermsComponent 例 - 接頭辞を使用

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$query = new SolrQuery();$query->setTerms(true);/* $prefix で始まる語だけを返す */$prefix = 'c';$query->setTermsField('cat')->setTermsPrefix($prefix);$updateResponse = $client->query($query);print_r($updateResponse->getResponse());?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 1
        )

    [terms] => SolrObject Object
        (
            [cat] => SolrObject Object
                (
                    [card] => 2
                    [connector] => 2
                    [camera] => 1
                    [copier] => 1
                )

        )

)

例8 簡単な TermsComponent 例 - 最小の頻度を指定

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$query = new SolrQuery();$query->setTerms(true);/* $prefix で始まる語だけを返す */$prefix = 'c';/* 2回以上の頻度の語だけを返す */$min_frequency = 2;$query->setTermsField('cat')->setTermsPrefix($prefix)->setTermsMinCount($min_frequency);$updateResponse = $client->query($query);print_r($updateResponse->getResponse());?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 0
        )

    [terms] => SolrObject Object
        (
            [cat] => SolrObject Object
                (
                    [card] => 2
                    [connector] => 2
                )

        )

)

例9 簡単なファセット例

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$query = new SolrQuery('*:*');$query->setFacet(true);$query->addFacetField('cat')->addFacetField('name')->setFacetMinCount(2);$updateResponse = $client->query($query);$response_array = $updateResponse->getResponse();$facet_data = $response_array->facet_counts->facet_fields;print_r($facet_data);?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [cat] => SolrObject Object
        (
            [electronics] => 14
            [memory] => 3
            [Lucene] => 2
            [Software] => 2
            [card] => 2
            [connector] => 2
            [drive] => 2
            [graphics] => 2
            [hard] => 2
            [monitor] => 2
            [search] => 2
            [software] => 2
        )

    [name] => SolrObject Object
        (
            [gb] => 6
            [1] => 3
            [184] => 3
            [2] => 3
            [3200] => 3
            [400] => 3
            [500] => 3
            [ddr] => 3
            [i] => 3
            [ipod] => 3
            [memori] => 3
            [pc] => 3
            [pin] => 3
            [pod] => 3
            [sdram] => 3
            [system] => 3
            [unbuff] => 3
            [canon] => 2
            [corsair] => 2
            [drive] => 2
            [hard] => 2
            [mb] => 2
            [n] => 2
            [power] => 2
            [retail] => 2
            [video] => 2
            [x] => 2
        )

)

例10 簡単なファセット例 - mincount を越える任意の項目と共に

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$query = new SolrQuery('*:*');$query->setFacet(true);$query->addFacetField('cat')->addFacetField('name')->setFacetMinCount(2)->setFacetMinCount(4, 'name');$updateResponse = $client->query($query);$response_array = $updateResponse->getResponse();$facet_data = $response_array->facet_counts->facet_fields;print_r($facet_data);?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [cat] => SolrObject Object
        (
            [electronics] => 14
            [memory] => 3
            [Lucene] => 2
            [Software] => 2
            [card] => 2
            [connector] => 2
            [drive] => 2
            [graphics] => 2
            [hard] => 2
            [monitor] => 2
            [search] => 2
            [software] => 2
        )

    [name] => SolrObject Object
        (
            [gb] => 6
        )

)

例11 Facet Date の例

<?phpinclude "bootstrap.php";$options = array(        'hostname' => SOLR_SERVER_HOSTNAME,        'login'    => SOLR_SERVER_USERNAME,        'password' => SOLR_SERVER_PASSWORD,        'port'     => SOLR_SERVER_PORT,);$client = new SolrClient($options);$query = new SolrQuery('*:*');$query->setFacet(true);$query->addFacetDateField('manufacturedate_dt');$query->setFacetDateStart('2006-02-13T00:00:00Z');$query->setFacetDateEnd('2012-02-13T00:00:00Z');$query->setFacetDateGap('+1YEAR');$query->setFacetDateHardEnd(1);$query->addFacetDateOther('before');$updateResponse = $client->query($query);$response_array = $updateResponse->getResponse();$facet_data = $response_array->facet_counts->facet_dates;print_r($facet_data);?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [manufacturedate_dt] => SolrObject Object
        (
            [2006-02-13T00:00:00Z] => 9
            [2007-02-13T00:00:00Z] => 0
            [2008-02-13T00:00:00Z] => 0
            [2009-02-13T00:00:00Z] => 0
            [2010-02-13T00:00:00Z] => 0
            [2011-02-13T00:00:00Z] => 0
            [gap] => +1YEAR
            [start] => 2006-02-13T00:00:00Z
            [end] => 2012-02-13T00:00:00Z
            [before] => 2
        )

)

例12 SSL 対応サーバーに接続

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,    'timeout'  => SOLR_SERVER_TIMEOUT,    'secure'   => SOLR_SECURE,    'ssl_cert' => SOLR_SSL_CERT_ONLY,    'ssl_key'  => SOLR_SSL_KEY,    'ssl_keypassword' => SOLR_SSL_KEYPASSWORD,    'ssl_cainfo' => SOLR_SSL_CAINFO,);$client = new SolrClient($options);$query = new SolrQuery('*:*');$query->setFacet(true);$query->addFacetField('cat')->addFacetField('name')->setFacetMinCount(2)->setFacetMinCount(4, 'name');$updateResponse = $client->query($query);$response_array = $updateResponse->getResponse();$facet_data = $response_array->facet_counts->facet_fields;print_r($facet_data);?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [cat] => SolrObject Object
        (
            [electronics] => 14
            [memory] => 3
            [Lucene] => 2
            [Software] => 2
            [card] => 2
            [connector] => 2
            [drive] => 2
            [graphics] => 2
            [hard] => 2
            [monitor] => 2
            [search] => 2
            [software] => 2
        )

    [name] => SolrObject Object
        (
            [gb] => 6
        )

)

例13 Collapsing a SolrQuery

<?phpinclude "bootstrap.php";$options = array(        'hostname' => SOLR_SERVER_HOSTNAME,        'login'    => SOLR_SERVER_USERNAME,        'password' => SOLR_SERVER_PASSWORD,        'port'     => SOLR_SERVER_PORT,        'path'     => SOLR_SERVER_PATH);$client = new SolrClient($options);$query = new SolrQuery('*:*');$collapseFunction = new SolrCollapseFunction('manu_id_s');$collapseFunction->setSize(2)->setNullPolicy(SolrCollapseFunction::NULLPOLICY_IGNORE);$query->collapse($collapseFunction)->setRows(4);$queryResponse = $client->query($query);$response = $queryResponse->getResponse();print_r($response);?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 1
            [params] => SolrObject Object
                (
                    [q] => *:*
                    [indent] => on
                    [fq] => {!collapse field=manu_id_s size=2 nullPolicy=ignore}
                    [rows] => 4
                    [version] => 2.2
                    [wt] => xml
                )

        )

    [response] => SolrObject Object
        (
            [numFound] => 14
            [start] => 0
            [docs] => Array
                (
                    [0] => SolrObject Object
                        (
                            [id] => SP2514N
                            [name] => Array
                                (
                                    [0] => Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133
                                )

                            [manu] => Array
                                (
                                    [0] => Samsung Electronics Co. Ltd.
                                )

                            [manu_id_s] => samsung
                            [cat] => Array
                                (
                                    [0] => electronics
                                    [1] => hard drive
                                )

                            [features] => Array
                                (
                                    [0] => 7200RPM, 8MB cache, IDE Ultra ATA-133
                                    [1] => NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor
                                )

                            [price] => Array
                                (
                                    [0] => 92
                                )

                            [popularity] => Array
                                (
                                    [0] => 6
                                )

                            [inStock] => Array
                                (
                                    [0] => 1
                                )

                            [manufacturedate_dt] => 2006-02-13T15:26:37Z
                            [store] => Array
                                (
                                    [0] => 35.0752,-97.032
                                )

                            [_version_] => 1510294336412057600
                        )

                    [1] => SolrObject Object
                        (
                            [id] => 6H500F0
                            [name] => Array
                                (
                                    [0] => Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300
                                )

                            [manu] => Array
                                (
                                    [0] => Maxtor Corp.
                                )

                            [manu_id_s] => maxtor
                            [cat] => Array
                                (
                                    [0] => electronics
                                    [1] => hard drive
                                )

                            [features] => Array
                                (
                                    [0] => SATA 3.0Gb/s, NCQ
                                    [1] => 8.5ms seek
                                    [2] => 16MB cache
                                )

                            [price] => Array
                                (
                                    [0] => 350
                                )

                            [popularity] => Array
                                (
                                    [0] => 6
                                )

                            [inStock] => Array
                                (
                                    [0] => 1
                                )

                            [store] => Array
                                (
                                    [0] => 45.17614,-93.87341
                                )

                            [manufacturedate_dt] => 2006-02-13T15:26:37Z
                            [_version_] => 1510294336449806336
                        )

                    [2] => SolrObject Object
                        (
                            [id] => F8V7067-APL-KIT
                            [name] => Array
                                (
                                    [0] => Belkin Mobile Power Cord for iPod w/ Dock
                                )

                            [manu] => Array
                                (
                                    [0] => Belkin
                                )

                            [manu_id_s] => belkin
                            [cat] => Array
                                (
                                    [0] => electronics
                                    [1] => connector
                                )

                            [features] => Array
                                (
                                    [0] => car power adapter, white
                                )

                            [weight] => Array
                                (
                                    [0] => 4
                                )

                            [price] => Array
                                (
                                    [0] => 19.95
                                )

                            [popularity] => Array
                                (
                                    [0] => 1
                                )

                            [inStock] => Array
                                (
                                    [0] => 
                                )

                            [store] => Array
                                (
                                    [0] => 45.18014,-93.87741
                                )

                            [manufacturedate_dt] => 2005-08-01T16:30:25Z
                            [_version_] => 1510294336458194944
                        )

                    [3] => SolrObject Object
                        (
                            [id] => MA147LL/A
                            [name] => Array
                                (
                                    [0] => Apple 60 GB iPod with Video Playback Black
                                )

                            [manu] => Array
                                (
                                    [0] => Apple Computer Inc.
                                )

                            [manu_id_s] => apple
                            [cat] => Array
                                (
                                    [0] => electronics
                                    [1] => music
                                )

                            [features] => Array
                                (
                                    [0] => iTunes, Podcasts, Audiobooks
                                    [1] => Stores up to 15,000 songs, 25,000 photos, or 150 hours of video
                                    [2] => 2.5-inch, 320x240 color TFT LCD display with LED backlight
                                    [3] => Up to 20 hours of battery life
                                    [4] => Plays AAC, MP3, WAV, AIFF, Audible, Apple Lossless, H.264 video
                                    [5] => Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication
                                )

                            [includes] => Array
                                (
                                    [0] => earbud headphones, USB cable
                                )

                            [weight] => Array
                                (
                                    [0] => 5.5
                                )

                            [price] => Array
                                (
                                    [0] => 399
                                )

                            [popularity] => Array
                                (
                                    [0] => 10
                                )

                            [inStock] => Array
                                (
                                    [0] => 1
                                )

                            [store] => Array
                                (
                                    [0] => 37.7752,-100.0232
                                )

                            [manufacturedate_dt] => 2005-10-12T08:00:00Z
                            [_version_] => 1510294336562003968
                        )

                )

        )

)

例14 Solr Real Time Get (RTG) の例 SolrClient::getById()

<?phpinclude "bootstrap.php";$options = array(    'hostname' => SOLR_SERVER_HOSTNAME,    'login'    => SOLR_SERVER_USERNAME,    'password' => SOLR_SERVER_PASSWORD,    'port'     => SOLR_SERVER_PORT,    'path'     => SOLR_SERVER_PATH);$client = new SolrClient($options);$response = $client->getById('GB18030TEST');print_r($response->getResponse());?>

上の例の出力は、 たとえば以下のようになります。


SolrObject Object
(
    [doc] => SolrObject Object
        (
            [id] => GB18030TEST
            [name] => Array
                (
                    [0] => Test with some GB18030 encoded characters
                )

            [features] => Array
                (
                    [0] => No accents here
                    [1] => (訳注:ここに記載されている中国語文字列は、英語版マニュアルでご確認ください)
                    [2] => This is a feature (translated)
                    [3] => (訳注:ここに記載されている中国語文字列は、英語版マニュアルでご確認ください)
                    [4] => This document is very shiny (translated)
                )

            [price] => Array
                (
                    [0] => 0
                )

            [inStock] => Array
                (
                    [0] => 1
                )

            [_version_] => 1510294336239042560
        )

)