Solr使用方法是什么

75次阅读
没有评论

共计 6652 个字符,预计需要花费 17 分钟才能阅读完成。

这篇文章主要介绍“Solr 使用方法是什么”,在日常操作中,相信很多人在 Solr 使用方法是什么问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Solr 使用方法是什么”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择:

1. 基于 Lucene 自己进行封装实现站内搜索。工作量及扩展性都较大,不采用。

2. 调用 Google、Baidu 的 API 实现站内搜索。同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用。

3. 基于 Compass+Lucene 实现站内搜索。适合于对数据库驱动的应用数据进行索引,尤其是替代传统的 like‘%expression%’来实现对 varchar 或 clob 等字段的索引,对于实现站内搜索是一种值得采纳的方案。但在分布式处理、接口封装上尚需要自己进行一定程度的封装,暂时不采用。

4. 基于 Solr 实现站内搜索。封装及扩展性较好,提供了较为完备的解决方案,因此在门户社区中采用此方案,后期加入 Compass 方案。

1、 Solr 简介

Solr 是一个基于 Lucene 的 Java 搜索引擎服务器。Solr  提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr 已经在众多大型的网站中使用,较为成熟和稳定。Solr  包装并扩展了 Lucene,所以 Solr 的基本上沿用了 Lucene 的相关术语。更重要的是,Solr  创建的索引与 Lucene 搜索引擎库完全兼容。通过对 Solr  进行适当的配置,某些情况下可能需要进行编码,Solr  可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如 Nutch、Luke)也可以使用 Solr  创建的索引。

2、Tomcat 下 Solr 安装配置
由于 Solr 基于 java 开发,因此 Solr 在 windows 及 Linux 都能较好部署使用,但由于 Solr 提供了一些用于测试及管理、维护较为方便的 shell 脚本,因此在生产部署时候建议安装在 Linux 上,测试时候可以在 windows 使用。

下面以 Linux 下安装配置 Solr 进行说明,windows 与此类似。
wget http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.zip
unzip apache-tomcat-6.0.16.zip
mv apache-tomcat-6.0.16 /opt/tomcat
chmod 755 /opt/tomcat/bin/*
wget http://apache.mirror.phpchina.com/lucene/solr/1.2/apache-solr-1.2.0.tgz
tar zxvf apache-solr-1.2.0.tgz

Solr 的安装配置最为麻烦的是对 solr.solr.home 的理解和配置,主要有三种

基于当前路径的方式  
cp apache-solr-1.2.0/dist/apache-solr-1.2.0.war /opt/tomcat/webapps/solr.war
mkdir /opt/solr-tomcat
cp -r apache-solr-1.2.0/example/solr/ /opt/solr-tomcat/
cd /opt/solr-tomcat
/opt/tomcat/bin/startup.sh

由于在此种情况下(没有设定 solr.solr.home 环境变量或 JNDI 的情况下),Solr 查找./solr,因此在启动时候需要切换到 /opt/solr-tomcat

基于环境变量 solr.solr.home
在当前用户的环境变量中(.bash_profile)或在 /opt/tomcat/catalina.sh 中添加如下环境变量
export JAVA_OPTS= $JAVA_OPTS -Dsolr.solr.home=/opt/solr-tomcat/solr

基于 JNDI 配置  
mkdir –p /opt/tomcat/conf/Catalina/localhost
touch /opt/tomcat/conf/Catalina/localhost/solr.xml,内容如下:

Context docBase= /opt/tomcat/webapps/solr.war  debug= 0  crossContext= true    
  Environment name= solr/home  type= java.lang.String  value= /opt/solr-tomcat/solr  override= true  /  
 /Context

访问 solr 管理界面 http://ip:port/solr

3、 Solr 原理  

Solr 对外提供标准的 http 接口来实现对数据的索引的增加、删除、修改、查询。在  Solr  中,用户通过向部署在 servlet 容器中的  Solr Web 应用程序发送 HTTP 请求来启动索引和搜索。Solr  接受请求,确定要使用的适当 SolrRequestHandler,然后处理请求。通过 HTTP 以同样的方式返回响应。默认配置返回 Solr  的标准 XML 响应,也可以配置 Solr  的备用响应格式。

可以向  Solr  索引 servlet 传递四个不同的索引请求:
add/update 允许向  Solr  添加文档或更新文档。直到提交后才能搜索到这些添加和更新。
commit 告诉  Solr,应该使上次提交以来所做的所有更改都可以搜索到。
optimize 重构 Lucene 的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。
delete 可以通过 id 或查询来指定。按 id 删除将删除具有指定 id 的文档;按查询删除将删除查询返回的所有文档。 

一个典型的 Add 请求报文

add  
  doc  
  field name= id TWINX2048-3200PRO /field  
  field name= name CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail /field  
  field name= manu Corsair Microsystems Inc. /field  
  field name= cat electronics /field  
  field name= cat memory /field  
  field name= features CAS latency 2, 2-3-3-6 timing, 2.75v, unbuffered, heat-spreader /field  
  field name= price 185 /field  
  field name= popularity 5 /field  
  field name= inStock true /field  
  /doc  
  doc  
  field name= id VS1GB400C3 /field  
  field name= name CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail /field  
  field name= manu Corsair Microsystems Inc. /field  
  field name= cat electronics /field  
  field name= cat memory /field  
  field name= price 74.99 /field  
  field name= popularity 7 /field  
  field name= inStock true /field  
  /doc  
 /add

一个典型的搜索结果报文:

response  
  lst name= responseHeader  
  int name= status 0 /int  
  int name= QTime 6 /int  
  lst name= params  
  str name= rows 10 /str  
  str name= start 0 /str  
  str name= fl *,score /str  
  str name= hl true /str  
  str name= q content: faceted browsing /str  
  /lst  
  /lst  
 
  result name= response  numFound= 1  start= 0  maxScore= 1.058217  
  doc  
  float name= score 1.058217 /float  
  arr name= all  
  str http://localhost/myBlog/solr-rocks-again.html /str  
  str Solr is Great /str  
  str solr,lucene,enterprise,search,greatness /str  
  str Solr has some really great features, like faceted browsing and replication /str  
  /arr  
  arr name= content  
  str Solr has some really great features, like faceted browsing and replication /str  
  /arr  
  date name= creationDate 2007-01-07T05:04:00.000Z /date  
  arr name= keywords  
  str solr,lucene,enterprise,search,greatness /str  
  /arr  
  int name= rating 8 /int  
  str name= title Solr is Great /str  
  str name= url http://localhost/myBlog/solr-rocks-again.html /str  
  /doc  
  /result  
 
  lst name= highlighting  
  lst name= http://localhost/myBlog/solr-rocks-again.html  
  arr name= content  
  str Solr has some really great features, like  em faceted /em  
  em browsing /em  and replication /str  
  /arr  
  /lst  
  /lst  
 /response

关于 solr 的详细使用说明,请参考
http://wiki.apache.org/solr/FrontPage

4、 Solr 测试使用  

Solr 的安装包包含了相关的测试样例,路径在 apache-solr-1.2.0/example/exampledocs

1. 使用 shell 脚本(curl)测试 Solr 的操作:
cd apache-solr-1.2.0/example/exampledocs
vi post.sh,根据 tomcat 的 ip、port 修改 URL 变量的值 URL=http://localhost:8080/solr/update
./post.sh *.xml  # 

2. 使用 Solr 的 java 包测试 Solr 的操作:
查看帮助:java -jar post.jar –help
提交测试数据:
java -Durl=http://localhost:8080/solr/update -Ddata=files -jar post.jar  *.xml 

下面以增加索引字段 liangchuan、url 为例,说明一下 Solr 中索引命令的使用

1) 修改 solr 的 schema,配置需要索引字段的说明:
vi /opt/solr-tomcat/solr/conf/schema.xml , 在 fields 中增加如下内容

field name= liangchuan  type= string  indexed= true  stored= true /  
 field name= url  type= string  indexed= true  stored= true /

2) 创建增加索引请求的 xml 测试文件
touch /root/apache-solr-1.2.0/example/exampledocs/liangchuan.xml, 内容如下:

add  
  doc  
  field name= id liangchuan000 /field  
  field name= name Solr, the Enterprise Search Server /field  
  field name= manu Apache Software Foundation /field  
  field name= liangchuan liangchuan s solr  hello,world  test /field  
  field name= url http://www.google.com /field  
  /doc  
 /add

3) 提交索引请求
cd apache-solr-1.2.0/example/exampledocs
./post.sh liangchuan.xml

4) 查询
通过 solr 的管理员界面 http://localhost:8080/solr/admin 查询
或通过 curl 测试:
export URL= http://localhost:8080/solr/select/
curl $URL?indent=on q=liangchuan fl=*,score

5、Solr 查询条件参数说明
参数   描述   示例
q  

Solr  中用来搜索的查询。可以通过追加一个分号和已索引且未进行断词的字段的名称来包含排序信息。默认的排序是 score desc,指按记分降序排序。 
q=myField:Java AND otherField:developerWorks; date asc
此查询搜索指定的两个字段并根据一个日期字段对结果进行排序。

start   将初始偏移量指定到结果集中。可用于对结果进行分页。默认值为 0。 
start=15
返回从第 15 个结果开始的结果。

rows   返回文档的最大数目。默认值为 10。  rows=25

fq   提供一个可选的筛选器查询。查询结果被限制为仅搜索筛选器查询返回的结果。筛选过的查询由  Solr  进行缓存。它们对提高复杂查询的速度非常有用。
任何可以用 q 参数传递的有效查询,排序信息除外。

hl   当 hl=true 时,在查询响应中醒目显示片段。默认为 false。参看醒目显示参数上的  Solr Wiki 部分可以查看更多选项   hl=true

fl   作为逗号分隔的列表指定文档结果中应返回的 Field 集。默认为“*”,指所有的字段。“score”指还应返回记分。 
*,score

Solr 的查询条件参数 q 的格式与 Lucene 相同

6、在门户社区中 solr 使用模式  
在门户社区中需要使用 solr,可采用如下模式:

对原有系统已有的数据或需要索引的数据量较大的情况  
直接采用通过 http 方式调用 solr 的接口方式,效率较差,采用 solr 本身对 csv 的支持,将数据导出为 csv 格式,然后调用 solr 的 csv 接口 http://localhost:8080/solr/update/csv

对系统新增的数据  
先将需要索引查询的数据组装成 xml 格式,然后使用 httpclient 将数据提交到 solr  的 http 接口,例如  
http://localhost:8080/solr/update

到此,关于“Solr 使用方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计6652字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)