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。

源码:

<?php
/**
 * 搜索相关的应用
 * $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;
}
?>

转载于:https://my.oschina.net/mickelfeng/blog/99615

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值