吊炸天企业级搜索引擎-Solr

一、 Solr简介php

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


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

 

下面以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的理解和配置,主要有三种shell

 

(1)基于当前路径的方式 
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-tomcatapache

 

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

(3)基于JNDI配置 
mkdir –p /opt/tomcat/conf/Catalina/localhost
touch /opt/tomcat/conf/Catalina/localhost/solr.xml 
windows

内容以下:缓存

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



3、 Solr原理bash

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请求报文:


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



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>中增长以下内容


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

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"


五、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 集。默认为 “*”,指全部的字段。



要想获取更多java技术资讯


就请长按下方二维码


进行关注吧↓↓↓



本文分享自微信公众号 - Java高级架构师(java968)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索