PHP客户端 solr查询具体实现
来源:互联网 发布:网络教学的缺点 编辑:程序博客网 时间:2024/05/16 17:03
Sorl简介
Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。
sorl在php中的具体实现步骤
- 写一个solr搜索操作基础类
- 实现具体调用操作类
- 分析查询地址,拼凑查询地址
1.写一个solr搜索操作基础类
将对solr的操作进行封装:
/****************************************************** 文件名: solr.class.php* 功能: solr搜索操作基础类* 版本: 1.0* 日期: 2016-06-15* 作者: JoeXiong* 版权: Copyright © 2016 https://github.com/JoeXiong All Rights Reserved*/class solr { private $_url; private $_core_name; private $_wt; /** * 构造函数 * @param string $url * @param string $core_name * @param string $wt 0:php 1:json 2:xml */ public function __construct($url, $core_name, $wt=0) { $this->_url = $url; $this->_core_name = $core_name; if(0===$wt) { $wt = 'php'; } elseif(1===$wt) { $wt = 'json'; } else { $wt = 'xml'; } $this->_wt = $wt; } public function curl_get($url, $time_out=1) { if(0 === stripos($url, 'http:')){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, $time_out); $data = curl_exec($ch); $res[0] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $res[1] = $data; curl_close($ch); return $res; } else { echo 'ERROR URL'; exit(); } } public function curl_post($url, $vars) { if(0 === stripos($url, 'http:')){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content- type:application/json')); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); $data = curl_exec($ch); $res[0] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $res[1] = $data; curl_close($ch); return $res; } else { echo 'ERROR URL'; exit(); } } /** * 搜索引擎状态 */ public function ping() { return $this->curl_get($this->_url.$this->_core_name. '/admin/ping?wt='.$this->_wt); } /** * 获得分词结果 * @param string $field_value * @param string $field_type * @return mixed */ public function analysis($field_value, $field_type) { return $this->curl_get($this->_url. $this->_core_name. $this->_wt. '&analysis.fieldvalue='. urlencode($field_value). '&analysis.fieldtype='.$field_type); } /** * get function * @return Ambigous <unknown, string> */ public function getUrl() { return $this->_url; } public function getCoreName() { return $this->_core_name; } public function getWt() { return $this->_wt; } /** * set function */ public function setUrl($url) { $this->_url = $url; } public function setCoreName($core_name) { $this->_core_name = $core_name; } public function setWt($wt) { $this->_wt = $wt; }}?>
2. 实现具体调用操作类
class solrsearcher extends solr { public function __construct($url, $core_name, $wt) { parent::__construct($url, $core_name, $wt); } public function q($query, $time_out=1) { return self::curl_get(self::getUrl().self::getCoreName().'/select?'.$query, $time_out); } /** * solr查询,返回查询结果数组 * @param : string $query 查询字符串 * @param : int $start 起始处 * @param : int $rows 返回条数 * @param : string $wt =>默认返回数据格式为json * @return : array | boolean * */ public function solrQuery($query="q=*:*", $start=0, $rows=64, $wt="json"){ try { $query .= "&wt=".$wt . "&start=".$start . "&rows=".$rows; $rejsondata = self::q($query); if($rejsondata[0]==200){ return json_decode($rejsondata[1], true); }else{ return FALSE; } } catch (Exception $e) { throw $e; } }}
3.分析查询地址,拼凑查询地址
去服务器搭建好的solr先模拟请求,会有请求地址,比如我模拟出来我请求的地址是:
http://192.0.0.8:8083/solr/keyword/select?q=keyword%3At*&wt=json&indent=true
这里直接用的是q查询,看q=keyword%3At*&wt=json&indent=true,需要拼凑的字段就行
public function solrKeywordAjax() { require_once (_SITE_ROOT_.'/config/solr.config.php'); $searchk = isset($_POST['searchk'])?addslashes(trim($_POST['searchk'])):NULL; $solrobj = new solrsearcher($solrserver['s1']['url'], $s1corename['10003']['corename'], 1); //solr search BEGIN//////////////////////////////////////////////////// //$query = q=urlencode(pinyin:*$searchk*).&sort=urlencode($sort) //判断值含有汉字 -- Y:keyword N:pinyin $flag = true; //搜索方式标记 true:keyword false:pinyin if($searchk != null){ if (preg_match("/([\x81-\xfe][\x40-\xfe])/", $searchk, $match)) { $q = 'keyword:'.$searchk.'*'; } else { $q = 'pinyin:'.strtolower($searchk).'*'; $flag = false; } }else{ echo json_encode(array()); exit(); } $sort = 'weight desc'; $query = '&q='.urlencode($q).'&sort='.urlencode($sort); //显示条数 $start = 0; $rows = 10; //返回查询的数据 $searchdataarr = $solrobj->solrQuery($query, $start, $rows); //solr search END//////////////////////////////////////////////////////// }
0 0
- PHP客户端 solr查询具体实现
- solr客户端查询语法
- Solr客户端查询Java
- Solr集群架构具体实现
- JSONP的客户端具体实现:
- Solr客户端 SolrJ单机 添加查询操作
- solr全文查询基本实现
- Solarium简介-Solr的PHP客户端
- ios 推送 PHP具体实现
- Apache Solr + PHP 进行全文查询
- Solr高效利用:Solr实现SQL的查询与统计
- Solr学习(5.4)-Solr实现SQL的查询与统计
- Solr客户端
- solr 的客户端调用solrj 建索引+分页查询
- solr 的客户端调用solrj 建索引+分页查询
- solr 的客户端调用solrj 建索引+分页查询
- solr <一>用 Java客户端 建索引+分页查询
- SSH动态查询具体实现之service
- scala函数 for循环
- 树中点对距离(点分治)
- 利用ListItem.Expandable来显示一个可以扩展的列表
- 成绩排序 qsort&&bsearch
- Nginx的nginx.conf配置文件中文注释说明
- PHP客户端 solr查询具体实现
- phpmyadmin乱码问题
- 迪克斯特拉算法
- group子句和having子句详解
- ambari安装Hadoop总结
- Head_First设计模式(一)----策略模式
- 紫书_第八章_高效算法设计_8.2.3——二分查找
- RXjava解决数据管理问题
- HTTP Headers 的方方面面