共计 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 小编会继续努力为大家带来更多实用的文章!