solr搜索引擎基本概念与windows下php调用

1.Solr基本概念

Solr是一种开放源码的、基于Lucene的搜索服务器。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。
 
官网:http://lucene.apache.org/solr/
 
Solr全文检索基本原理:

http://www.importnew.com/12707.html

 

为什么要用solr?

一般情况中的查询和搜索,我们直接查询数据库MySQL。但是查询数据库主要有一些局限性:
比如多表查询效率低,大文本字段不好建立索引和搜索,复杂的条件查询和搜索功能不够强大,或者说不够简单。
使用Solr的话,就很简单地解决了以上问题。

2.相关概念:
 
  ·Collection:在SolrCloud集群中逻辑意义上的完整的索引。它常常被划分为一个或多个Shard,它们使用相同的Config Set。如果Shard数超过一个,它就是分布式索引,SolrCloud让你通过Collection名称引用它,而不需要关心分布式检索时需要使用的和Shard相关参数。
  ·Config Set: Solr Core提供服务必须的一组配置文件。每个config set有一个名字。最小需要包括solrconfig.xml (SolrConfigXml)和schema.xml (SchemaXml),除此之外,依据这两个文件的配置内容,可能还需要包含其它文件。它存储在Zookeeper中。Config sets可以重新上传或者使用upconfig命令更新,使用Solr的启动参数bootstrap_confdir指定可以初始化或更新它。
  ·Core: 也就是Solr Core,一个Solr中包含一个或者多个Solr Core,每个Solr Core可以独立提供索引和查询功能,每个Solr Core对应一个索引或者Collection的Shard,Solr Core的提出是为了增加管理灵活性和共用资源。在SolrCloud中有个不同点是它使用的配置是在Zookeeper中的,传统的Solr core的配置文件是在磁盘上的配置目录中。
  ·Leader: 赢得选举的Shard replicas。每个Shard有多个Replicas,这几个Replicas需要选举来确定一个Leader。选举可以发生在任何时间,但是通常他们仅在某个Solr实例发生故障时才会触发。当索引documents时,SolrCloud会传递它们到此Shard对应的leader,leader再分发它们到全部Shard的replicas。
  ·Replica: Shard的一个拷贝。每个Replica存在于Solr的一个Core中。一个命名为“test”的collection以numShards=1创建,并且指定replicationFactor设置为2,这会产生2个replicas,也就是对应会有2个Core,每个在不同的机器或者Solr实例。一个会被命名为test_shard1_replica1,另一个命名为test_shard1_replica2。它们中的一个会被选举为Leader。
  ·Shard: Collection的逻辑分片。每个Shard被化成一个或者多个replicas,通过选举确定哪个是Leader。
  ·Zookeeper: Zookeeper提供分布式锁功能,对SolrCloud是必须的。它处理Leader选举。Solr可以以内嵌的Zookeeper运行,但是建议用独立的,并且最好有3个以上的主机。
  • facet:维度,相当于对查询结果的统计
  • constraints:约束,维度中的子类
  • breadcrumb:面包屑,根据选择, 列出的导航路径(选中列表)
俗话说“一张图胜过一千个字”,比如淘宝搜索“数码相机”,这三个概念对应如下:

 

Solr基本概念

 

 3.搜索请求参数

 

参数
说明
q
要搜索的内容。
  • 如果要搜索一个句子,用引号引起来:q="Hello wolrd"
  • 如果指定搜索某个域:q=field_name:content
  • 如果是中文,用引号引起来,就是全内容匹配才返回,如:q="笔记"
  • 如果要搜索多个单词、句子,使用加号(+):q="笔记"+"配置"
  • 如果要排除含有某个关键字的,使用减号(-):q="笔记"-"配置"
fq
Filter Query,搜索结果过滤(结果会被缓存起来):
  • fq=popularity:[10 to *]:只返回popularity大于10的结果
  • 需要同时满足两个条件的情况:fq=popularity:[10 TO *]&fq=section:0
  • 上面这种也可以写成:fq=popularity:[10 TO *]+fq=section:0
后两种的不同点:前一种:搜索结果分开存在缓存中,然后取交集;后一种:搜索结果存在一个缓存中
sort
指定搜索结果按照某个域来排序,例子:
  • score desc(缺省):按照搜索分数降序排序
  • price asc:按照“price”域升序排序
  • nStock desc, price asc:先按照nStock降序,再按照price升序
start, rows
返回第start条开始,一共rows条记录,例子:
  • start=11&rows=100
  • 缺省:start=0, rows=10
fl
要返回的域,比如“id”、*,如果有多个,用逗号(,)分开,还可以返回score。例子:
  • fl=id,name
  • fl=id,score
  • fl=*,score
df
 默认的查询字段,重新指定并覆盖schema.xml中的default field
wt
结果的格式,json, xml…
facet
统计查询结果:
按某个域统计:facet=true&facet.field=author(按照“author”这个域统计)
 
 
参考:https://cwiki.apache.org/confluence/display/solr/Searching
 
4.Windows安装
 
下载地址:SOLR  JDK
 
下载后解压,并通过Cygwin运行指令(windows默认命令行不可以!)。
 
以下是可用的solr指令及用法:
 
这里运行的就是solr服务了,solr从5.x版本之后就自带web server了,不用另外安装tomcat!
 
运行服务之后浏览器打开 http://localhost:8984/solr即可看到solr管理后台了:
 
 
5.php调用solr服务:
 
安装php扩展:php_ssh2 php_solr  
 
附带window下php全部扩展列表:http://windows.php.net/downloads/pecl/releases/
 
找到需要的扩展即可下载,然后放到$PHP_HOME/ext目录下
extension=php_ssh2.dll
extension=php_solr.dll

然后运行:

<?php

echo phpinfo();

查看solr扩展是否安装成功。

 
 
solr扩展阅读:solr从入门到精通

posted @ 2016-08-16 16:23  小天儿  阅读(455)  评论(0)    收藏  举报