solr操作函数php,PHP下solr的分词和搜索函数

在PHP应用下,为了更高效的对输入的关键词进行分词和搜索处理,特整理了专门的两个函数。

分词函数:function solr_analysis();

搜索函数:function solr_search();

在使用之前需要定义两个常量:

define(‘SEARCH_HOSTNAME’, ‘http://10.10.10.10:8983′);

define(‘SEARCH_QUERY’, SEARCH_HOSTNAME .’/solr/browse’);

define(‘SEARCH_ANALYSIS’, SEARCH_HOSTNAME. ‘/solr/analysis/field’);

以下提供的是基于CI框架下的function,用到了CI的curl。

源码:

/**

* 搜索相关的应用

* $Id: search_helper.php 6812 2011-12-16 08:55:03Z wangquanlong $

* $LastChangedDate: 2011-12-16 16:55:03 +0800 (星期五, 16 十二月 2011) $

*/

/**

* 通用搜索方法

* @param $keyword

* @param $start

* @param $pagesize

*/

function solr_search($keyword, $type, $start=0, $pagesize=10, $sort=null){

$keyword = trim($keyword);

if( $keyword=='' ){

return array();

}

$CI = & get_instance ();

$CI->load->library ( 'curl' );

$CI->curl->open();

$CI->curl->_set_opt(CURLOPT_USERPWD, 'username:password');

$url = SEARCH_QUERY."?q=".$keyword."+AND+sourcetype:{$type}&version=2.2&start={$start}&rows={$pagesize}&hl.fl=name&indent=off&wt=php".( trim($sort)?'&sort='.trim($sort):'' );

$curl_result = $CI->curl->http_get($url);

$result = array();

if ($curl_result) {

@eval ( "\$curl_result=$curl_result;" );

if (isset ( $curl_result) ) {

$result['url'] = $url;

$result['sum'] = $curl_result['response']['numFound'];

$result['docs'] = $curl_result['response']['docs'];

}

}

return $result;

}

/**

* 通用搜索分词方法,不能指定搜索字段,传入一个字符串,返回数据,分好词的数组

* @param string $keyword

* @return array $ana_result_arr

*/

function solr_analysis($keyword) {

$keyword = trim($keyword);

$CI = & get_instance ();

$CI->load->library ( 'curl' );

$CI->curl->open();

$CI->curl->_set_opt(CURLOPT_USERPWD, 'username:password');

$url = SEARCH_ANALYSIS."?q=".$keyword."&indent&wt=php";

$curl_result = $CI->curl->http_get($url);

//分词

$ana_result_arr = array();

if ($curl_result) {

@eval ( "\$curl_result=$curl_result;" );

if (isset ( $curl_result ['analysis'] ['field_names'] ['text'] ['query'] ['org.wltea.analyzer.lucene.IKTokenizer'] )) {

$ana_result = $curl_result ['analysis'] ['field_names'] ['text'] ['query'] ['org.wltea.analyzer.lucene.IKTokenizer'];

$ana_result_arr = array ();

if (is_array ( $ana_result ) ) {

foreach ($ana_result as $v){

$ana_result_arr [] = $v ['text'];

}

}

}

}

return $ana_result_arr;

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值