solr环境部署

linux 环境部署

  • 先安装java环境 ,需要Java Runtime Environment(JRE) 1.7或更高版本
  • 下载5.5版本的solr zip包  http://mirror.bit.edu.cn/apache/lucene/solr/5.5.0/
  • 解压到当前目录unzip -o solr-5.5.0.zip -d ./
  • 创建应用程序目录mkdir -p /usr/local/solr
  • svn 代码solr_project/ check out 至 /data目录下
  • 创建运行solr的用户并赋权
    • # groupadd solr
    • # useradd -g solr solr
    • # chown -R solr.solr /data/solr_project/solr_cores /usr/local/solr
  • 安装solr服务solr-5.5.0/bin/install_solr_service.sh solr-5.5.0.zip -d /data/solr_project/solr_cores -i /usr/local/solr
  • 检查服务# service solr status
  • /data/solr_project/README.txt里有增加core,删除core重启core介绍
    • solr_cores是solr存放core的目录
    • 新增core配置参考solr_cores/demo_core配置,修改conf里的managed-schema最后的字段信息
    • 新增core方法:复制demo_core,重命名为目标target_core,修改配置字段信息后,执行脚本./solr_s/add_core.sh target_core
    • 修改配置后需要重启solr,执行脚本./solr_cores/restart_solr.sh即可
    • import_scripts存放导入core数据的脚本,对应core命名
    • configs放置一些配置信息
    • hnlog_文件夹存放索引更新的日志
    • includes存放一些公用类
  • 扩展类添加到(如ik分词)/usr/local/solr/solr/server/solr-webapp/webapp/WEB-INF/lib

更新core的scheme字段配置与导数据

  • solr_project已加入版本控制:svn://192.168.2.231/solr_project
  • 配置文件,solr_project/solr_cores/demo_core/conf/managed-schema,对应demo_core
  • 修改字段配置后重启solr脚本./restart_solr.sh
  • 导数据脚本solr_project/import_scripts/demo_core.php,对应core名称

添加ik中文分词

  • 将solr_project/inluces里的ik jar包放进/usr/local/solr/solr/server/solr-webapp/webapp/WEB-INF/lib
  • 将jar包中ext.dic IKAnalyzer.cfg.xml stopword.dic复制进/usr/local/solr/solr/server/solr-webapp/webapp/WEB-INF/classes
  • solr_project/solr_cores/restart_solr.sh会将ext.dic、stopword.dic复制到上面的classes目录,自动更新扩展词库

其他说明

  • q - 查询字符串,必须的。
  • fl - 指定返回那些字段内容,用逗号或空格分隔多个。
  • start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
  • rows - 指定返回结果最多有多少条记录,配合start来实现分页。
  • sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默认是相关性降 * 序。
  • wt - (writer type)指定输出格式,可以有 xml, json, php, phps。
  • fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的
  • 检索运算符
  • : 指定字段查指定值,如返回所有值:
  • ? 表示单个任意字符的通配
  • * 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
  • ~ 表示模糊检索,如检索拼写类似于“roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。 邻近检索,如检索相隔10个单词的“apache”和“jakarta”,“jakarta apache”~10
  • ^ 控制相关度检索,如检索jakarta apache,同时希望去让“jakarta”的相关度更加好,那么在其后加上““符号和增量值,即jakarta4 apache
  • 布尔操作符AND、||
  • 布尔操作符OR、&&
  • 布尔操作符NOT、!、-(排除操作符不能单独与项使用构成查询)
  • + 存在操作符,要求符号”+“后的项必须在文档相应的域中存在
  • () 用于构成子查询
  • [] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710]
  • {}不包含范围检索,如检索某时间段记录,不包含头尾,date:{200707 TO 200710}
  • ” 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : “
solr调用语法

require(search/vendor/autoload.php');

class EcsSolrSearch
{
private $config;

private $client = '';

function __construct($config = null)
{
if (!$config) {
$this->config = array(
   'endpoint' => array(
       'localhost' => array(
           'host' => C('SOLR_HOST'),
           'port' => C('SOLR_PORT'),
           'path' => C('GOODS_CODE'),
       )
   )
);
}


$this->client = new Solarium\Client($this->config);


/**
* 查询
*@param $select array
*/
function response($select) {
$query = $this->client->createSelect($select);
$resultset = $this->client->select($query);
$aggregate_list = $select['component']['facetset']['facet'];
foreach ($aggregate_list as $k => $v) {
$$v['field'] = $resultset->getFacetSet()->getFacet($v['key']);
foreach ($$v['field'] as $k1 => $v1) {
if($v1 > 0){
$result[$v['field']][$k1] = $v1;
}
}
}
$result['goods_list'] = array();
foreach ($resultset as $document) {
$row = array();
// the documents are also iterable, to get all fields
foreach ($document as $field => $value) {
// this converts multivalue fields to a comma-separated string
if (is_array($value)) {
$value = implode(', ', $value);
}
$row[$field] = $value;
}
if(!empty($row)){
$result['goods_list'][] = $row;
}
}
return $result;
}


}


构造select

$select = array(
   'query'         => $query_string,
   'start'         => $start,
   'fields'        => array(),
   'rows'          => 2,
   //'sort'          => array($this->sortArr[$sort] => 'asc'),
   'filterquery' => array(
       'maxprice' => array(
           'query' => "shop_price:[$price_min TO $price_max]",
       ),
   ),
   'component' => array(
       'facetset' => array(
           'facet' => array(
               // notice this config uses an inline key value, instead of array key like the filterquery
               array('type' => 'field', 'key'=> 'cat_id','field' => 'cat_id'),
               array('type' => 'field', 'key'=> 'brand_id','field' => 'brand_id'),
           )
       ),
   ),
);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值