Apache Solr + PHP 进行全文查询

简介:

 

环境:

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.0\dist 下的apache-solr-1.2.0.war 改名为solr.war并拷贝到tomcat目录下的webapps目录中。

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

c)         tomcat目录下的conf\Catalina\localhost 目录中(如果没有则手工创建该目录)创建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:\solr\conf\schema.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

相关文章
|
12月前
|
Ubuntu PHP
Ubuntu下使用apt为Apache2编译PHP7.1
以上就是在Ubuntu系统下,使用apt为Apache2编译PHP7.1的过程。希望这个过程对你有所帮助,如果你在执行过程中遇到任何问题,都可以在网上找到相关的解决方案。
277 25
|
Ubuntu PHP Apache
在Ubuntu系统中为apt的apache2编译PHP 7.1的方法
以上就是在Ubuntu系统中为apt的apache2编译PHP 7.1的方法。希望这个指南能帮助你成功编译PHP 7.1,并在你的Apache服务器上运行PHP应用。
296 28
|
存储 SQL 关系型数据库
拉卡拉 x Apache Doris:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%
拉卡拉早期基于 Lambda 架构构建数据系统面临存储成本高、实时写入性能差、复杂查询耗时久、组件维护复杂等问题。为此,拉卡拉选择使用 Apache Doris 替换 Elasticsearch、Hive、Hbase、TiDB、Oracle / MySQL 等组件,实现了 OLAP 引擎的统一、查询性能提升 15 倍、资源减少 52% 的显著成效。
648 6
拉卡拉 x Apache Doris:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%
|
12月前
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
542 17
|
Oracle 关系型数据库 MySQL
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
本文分析了YashanDB中PHP通过ODBC查询数据时出现的数据截断问题,表现为超过256字节的数据被截断,以及isql工具无法显示超过300字节长度的数据。问题根源在于YashanDB的ODBC驱动仅支持单次查询,且PHP扩展库默认缓冲区限制。解决方案包括改用PHP ODBC扩展库而非PDO_ODBC,以及调整isql代码逻辑以支持循环取数或一次性读取完整数据。文章还提供了具体代码示例和规避方法,适用于23.2.4.14及更早版本。
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
|
JSON PHP 数据库
PHP成绩查询系统源码
PHP成绩查询系统源码
782 3
|
监控 定位技术 PHP
使用PHP接入纯真IP库:实现IP地址地理位置查询
本文介绍了如何使用PHP接入纯真IP库(QQWry),实现IP地址的地理位置查询。纯真IP库是一个轻量级的IP数据库,数据格式简单,查询速度快,适合Web应用。首先,下载并放置`QQWry.dat`文件到项目目录。接着,通过编写PHP类解析该文件,实现IP查询功能。最后,提供了一个完整的案例演示,展示如何查询IP地址对应的国家和地区信息。该工具适用于用户地理位置分析、访问日志分析和风控系统等场景,具有轻量级、查询速度快、数据更新方便等优点。
|
Oracle 关系型数据库 MySQL
【YashanDB 知识库】php 查询超过 256 长度字符串,数据被截断的问题
php 查询超过 256 字节数据,显示被截断:yashandb 的 odbc 驱动接口 SQLGetData 现在只支持单次查询,不支持多次取数据的操作。 isql 显示不出来,isql 工具最大只查询 300 长度的数据,超过了该长度未正常显示。
|
存储 JSON 物联网
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
本文我们将聚焦企业最普遍使用的 JSON 数据,分别介绍业界传统方案以及 Apache Doris 半结构化数据存储分析的三种方案,并通过图表直观展示这些方案的优势与不足。同时,结合具体应用场景,分享不同需求场景下的使用方式,帮助用户快速选择最合适的 JSON 数据存储及分析方案。
862 15
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
870 4

推荐镜像

更多
下一篇
开通oss服务