ApacheSolr+PHP進行全文查詢

科技小能手發表於2017-11-12

 

環境:

JDK 1.6

apache-solr-1.2.0 [http://lucene.apache.org/solr]

tomcat 5.5.17

wamp 2.0

SolrPhpClient 開發包 [https://issues.apache.org/jira/browse/SOLR-341]

 

1.         安裝solr

a)         下載apache-solr-1.2.0.zip,解壓。將apache-solr-1.2.0dist 下的apache-solr-1.2.0.war 改名為solr.war並拷貝到tomcat目錄下的webapps目錄中。

b)        apache-solr-1.2.0example 下的 solr 目錄拷貝到任意位置,如:E:solr

c)         tomcat目錄下的confCatalinalocalhost 目錄中(如果沒有則手工建立該目錄)建立solr.xml檔案,檔案內容如下:
<Context docBase=”D:/tomcat/webapps/solr.war” debug=”0″ crossContext=”true” >

1.         <Environment name=”solr/home” type=”java.lang.String” value=”E:/solr” override=”true” />

</Context>

d)        修改tomcatserver.xml檔案,找到<Connector port=”8080″ … 項(假設tomcat監聽8080埠),新增編碼方式,修改後如下<Connector port=”8080″  URIEncoding=”UTF-8″ …

e)         啟動tomcat。在瀏覽器中輸入http://localhost:8080/solr/,出現“Welcom to Solr”頁面,說明安裝成功。

 

2.         建立自定義索引模式

a)         開啟E:solrconfschema.xml 檔案 找到
<fields>

……

<fields>
替換為
<fields>

1.         <field name=”id” type=”string” indexed=”true” stored=”true” required=”true” />

2.         <field name=”name” type=” string ” indexed=”true” stored=”true” required=”true” />

3.         <field name=”address” type=”text” indexed=”true” stored=”true” multiValued=”true” required=”true” />            

</fields>


<defaultSearchField>text</defaultSearchField>
替換為

<defaultSearchField>name</defaultSearchField>

刪除所有< copyField …> 

3.         建立PHP客戶端
wampwww目錄下建立solr目錄。
SolrPhpClient.zip解壓,並將其中的Apache目錄拷貝到www/solr目錄下。

建立index.php檔案,內容如下:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”><html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”zh-CN” lang=”zh-CN”>

<head>

<meta content=”text/html; charset=UTF-8″ http-equiv=”Content-Type”/>

<title></title>

</head>

<body>

<?php

  require_once( `Apache/Solr/Service.php` );

 

  // 連線solr伺服器

  $solr = new Apache_Solr_Service( `127.0.0.1`, `8080`, `/solr` );

  //測試是否聯通

  if ( ! $solr->ping() ) {

    echo `Solr service not responding.`;

    exit;

  }

 

  //

  // 建立兩條記錄nuby  zhangyan

  //

 

 

  $parts = array(

    `nuby` => array(

      `id` => 1,

      `name` => `張巖`,

      `address` => array( `天安門`, `北京天安門` ),

    ),

    `zhangyan` => array(

      `partno` => 2,

      `name` => `張巖`,

      `model` => `北京五道口`,

    )

  );

   

  $documents = array();

 

  foreach ( $parts as $item => $fields ) {

    $part = new Apache_Solr_Document();

   

    foreach ( $fields as $key => $value ) {

      if ( is_array( $value ) ) {

        foreach ( $value as $datum ) {

          $part->setMultiValue( $key, $datum );

        }

      }

      else {

        $part->$key = $value;

      }

    }

   

    $documents[] = $part;

  }

   

  //

  // 建立索引

  //

  try {

    $solr->addDocuments( $documents );

    $solr->commit();

    $solr->optimize();

  }

  catch ( Exception $e ) {

    echo $e->getMessage();

  }

 

  //

  // 查詢

  //

  $offset = 0;

  $limit = 10;

 

  $queries = array(

    `id: 1 OR id: 2`,

    `name: 張巖`,

    `name: 天安門`

  );

 

  foreach ( $queries as $query ) {

    $response = $solr->search( $query, $offset, $limit );

   

    if ( $response->getHttpStatus() == 200 ) {

      if ( $response->response->numFound > 0 ) {

        foreach ( $response->response->docs as $doc ) {

          echo “$doc->partno $doc->name <br />”;

        }

        echo `<br />`;

      }

    }

    else {

      echo $response->getHttpStatusMessage();

    }

  }

?>

</body>

</html>


本文轉自holy2009 51CTO部落格,原文連結:http://blog.51cto.com/holy2010/326747


相關文章