开源企业搜索引擎SOLR的应用教程Word文件下载.docx
- 文档编号:19390295
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:76
- 大小:174.73KB
开源企业搜索引擎SOLR的应用教程Word文件下载.docx
《开源企业搜索引擎SOLR的应用教程Word文件下载.docx》由会员分享,可在线阅读,更多相关《开源企业搜索引擎SOLR的应用教程Word文件下载.docx(76页珍藏版)》请在冰豆网上搜索。
3Solr的应用29
3.1SOLR应用概述29
3.1.1Solr的应用模式29
3.1.2SOLR的使用过程说明30
3.2一个简单的例子30
3.2.1Solr
Schema设计30
3.2.2构建索引30
3.2.3搜索测试31
3.3搜索引擎的规划设计32
3.3.1定义业务模型32
3.3.2定制索引服务34
3.3.3定制搜索服务34
3.4搜索引擎配置34
3.4.1Solr
Schema设计(如何定制索引的结构?
)34
3.5如何进行索引操作?
36
3.5.1基本索引操作36
3.5.2批量索引操作37
3.6如何进行搜索39
3.6.1搜索语法39
3.6.2排序42
3.6.3字段增加权重42
3.6.4Solr分词器、过滤器、分析器42
3.6.5Solr高亮使用46
4SolrJ的用法46
4.1搜索接口的调用实例46
4.2Solrj的使用说明47
4.2.1AddingDatatoSolr47
4.2.2DirectlyaddingPOJOstoSolr49
4.2.3ReadingDatafromSolr51
4.3创建查询51
4.4使用SolrJ创建索引52
4.5Solrj包的结构说明53
4.5.1CommonsHttpSolrServer53
4.5.2SettingXMLResponseParser53
4.5.3ChangingotherConnectionSettings53
4.5.4EmbeddedSolrServer54
5Solr的实际应用测试报告54
5.1线下压力测试报告54
5.2线上环境运行报告54
6solr性能调优55
6.1SchemaDesignConsiderations55
6.1.1indexedfields55
6.1.2storedfields55
6.2ConfigurationConsiderations55
6.2.1mergeFactor55
6.2.2mergeFactorTradeoffs56
6.3CacheautoWarmCountConsiderations56
6.4Cachehitrate(缓存命中率)56
6.5ExplicitWarmingofSortFields56
6.6OptimizationConsiderations56
6.7UpdatesandCommitFrequencyTradeoffs56
6.8QueryResponseCompression57
6.9EmbeddedvsHTTPPost57
6.10RAMUsageConsiderations(内存方面的考虑)57
6.10.1OutOfMemoryErrors57
6.10.2MemoryallocatedtotheJavaVM57
7FAQ58
7.1出现乱码或者查不到结果的排查方法:
58
1概述
1.1企业搜索引擎方案选型
由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择:
1)基于Lucene自己进行封装实现站内搜索。
工作量及扩展性都较大,不采用。
2)调用Google、Baidu的API实现站内搜索。
同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用。
3)基于Compass+Lucene实现站内搜索。
适合于对数据库驱动的应用数据进行索引,尤其是替代传统的like‘%expression%’来实现对varchar或clob等字段的索引,对于实现站内搜索是一种值得采纳的方案。
但在分布式处理、接口封装上尚需要自己进行一定程度的封装。
4)基于Solr实现站内搜索。
封装及扩展性较好,提供了较为完备的解决方案,因此在门户社区中采用此方案。
基于以述的几种方案的综合分析,对于我们公司的搜索引擎方案,采用solr来实现比较合适。
1.2Solr的特性
ApacheSolr是一个开源的搜索服务器,Solr使用Java语言开发,主要基于HTTP和ApacheLucene实现。
定制Solr索引的实现方法很简单,用POST方法向Solr服务器发送一个描述所有Field及其内容的XML文档就可以了。
定制搜索的时候只需要发送HTTPGET请求即可,然后对Solr返回的信息进行重新布局,以产生利于用户理解的页面内容布局。
Solr1.3版本开始支持从数据库(通过JDBC)、RSS提要、Web页面和文件中导入数据,但是不直接支持从二进制文件格式中提取内容,比如MSOffice、AdobePDF或其他专有格式。
更重要的是,Solr创建的索引与Lucene搜索引擎库完全兼容。
通过对Solr进行适当的配置,某些情况下可能需要进行编码,Solr可以阅读和使用构建到其他Lucene应用程序中的索引。
此外,很多Lucene工具(如Nutch、Luke)也可以使用Solr创建的索引
Solr的特性包括:
✓高级的全文搜索功能
✓专为高通量的网络流量进行的优化
✓基于开放接口(XML和HTTP)的标准
✓综合的HTML管理界面
✓可伸缩性-能够有效地复制到另外一个Solr搜索服务器
✓使用XML配置达到灵活性和适配性
✓可扩展的插件体系
1.2.1Solr使用Lucene并且进行了扩展
✓一个真正的拥有动态域(DynamicField)和唯一键(UniqueKey)的数据模式(DataSchema)
✓对Lucene查询语言的强大扩展!
✓支持对结果进行动态的分组和过滤
✓高级的,可配置的文本分析
✓高度可配置和可扩展的缓存机制
✓性能优化
✓支持通过XML进行外部配置
✓拥有一个管理界面
✓可监控的日志
✓支持高速增量式更新(FastincrementalUpdates)和快照发布(SnapshotDistribution)
1.2.2Schema(模式)
✓定义域类型和文档的域
✓能够驱动智能处理
✓声明式的Lucene分析器规范
✓动态域能够随时增加域
✓拷贝域功能允许对一个域进行多种方式的索引,或者将多个域联合成一个可搜索的域
✓显式类型能够减少对域类型的猜测
✓能够使用外部的基于文件的终止词列表,同义词列表和保护词列表的配置
1.2.3查询
✓拥有可配置响应格式(XML/XSLT,JSON,Python,Ruby)的HTTP接口
✓高亮的上下文搜索结果
✓基于域值和显式查询的片段式搜索(FacetedSearch)
✓对查询语言增加了排序规范
✓常量的打分范围(Constantscoringrange)和前缀式查询-没有idf,coord,或者lengthNorm因子,对查询匹配的词没有数量限制
✓函数查询(FunctionQuery)-通过关于一个域的数值或顺序的函数对打分进行影响
1.2.4核心
✓可插拔的查询句柄(QueryHandler)和可扩展的XML数据格式
✓使用唯一键的域能够增强文档唯一性
✓能够高效地进行批量更新和删除
✓用户可配置的文档索引变化触发器(命令)
✓并发控制的搜索器
✓能够正确处理数字类型,从而能够进行排序和范围搜索
✓能够控制缺失排序域的文档
✓支持搜索结果的动态分组
1.2.5缓存
✓可配置的查询结果,过滤器,和文档缓存实例
✓可插拔的缓存实现
✓后台缓存热启:
当一个新的搜索器被打开时,可配置的搜索将它热启,避免第一个结果慢下来,当热启时,当前搜索器处理目前的请求(?
?
)。
✓后台自动热启:
当前搜索器缓存中最常访问的项目在新的搜索器中再次生成,能够在索引器和搜索器变化的时候高速缓存常查询的结果
✓快速和小的过滤器实现
✓支持自动热启的用户级别的缓存
1.2.6复制
✓能够将使用rsync传输时改变的索引部分有效的发布
✓使用拉策略(PullStrategy)来简化增加搜索器
✓可配置的发布间隔能够允许对时间线和缓存使用进行权衡选择
1.2.7管理接口
✓能够对缓存使用,更新和查询进行综合统计
✓文本分析调试器,能够显示每个分析器每个阶段的结果
✓基于WEB的查询和调试输出:
解析查询输出,Lucene的explain方法细节,能够解释为何某个文档打分低,被排除在结果中等等
1.3Solr服务原理
Solr对外提供标准的http接口来实现对数据的索引的增加、删除、修改、查询。
在Solr中,用户通过向部署在servlet容器中的SolrWeb应用程序发送HTTP请求来启动索引和搜索。
Solr接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。
通过HTTP以同样的方式返回响应。
默认配置返回Solr的标准XML响应,也可以配置Solr的备用响应格式。
1.3.1索引
可以向Solr索引servlet传递四个不同的索引请求:
1)add/update允许向Solr添加文档或更新文档。
直到提交后才能搜索到这些添加和更新。
2)commit告诉Solr,应该使上次提交以来所做的所有更改都可以搜索到。
3)optimize重构Lucene的文件以改进搜索性能。
索引完成后执行一下优化通常比较好。
如果更新比较频繁,则应该在使用率较低的时候安排优化。
一个索引无需优化也可以正常地运行。
优化是一个耗时较多的过程。
4)delete可以通过id或查询来指定。
按id删除将删除具有指定id的文档;
按查询删除将删除查询返回的所有文档。
要实现添加文档索引则只需要调用搜索接口以HTTP
POST的方式提交XML报文。
(索引接口:
http:
//192.168.10.85:
18080/solr/update),下面是添加文档的示例报文:
注:
多核心时为这个地址http:
18080/solr/core0/update/
<
add>
doc>
field
name="
id"
>
TWINX2048-3200PRO<
/field>
name"
CORSAIR
XMS
2GB
(2
x
1GB)
184-Pin
DDR
SDRAM
Unbuffered
400
(PC
3200)
Dual
Channel
Kit
System
Memory
-
Retail<
manu"
Corsair
Microsystems
Inc.<
cat"
electronics<
memory<
features"
CAS
latency
2,
2-3-3-6
timing,
2.75v,
unbuffered,
heat-spreader<
price"
185<
popularity"
5<
inStock"
true<
/doc>
VS1GB400C3<
ValueSelect
1GB
74.99<
7<
/add>
1.3.2搜索
要实现搜索则只需要调用搜索接口发送HTTP
GET,示例:
18080/solr/select?
indent=on&
version=2.2&
q=solr&
start=0&
rows=10&
fl=*%2Cscore&
qt=standard&
wt=standard
18080/solr/core0/select/
示例中,查询
词“ipad”的请求被提交,要求返回10个结果。
想知道更多有关各种可选查询选项的信息,请参看下文的“搜索语法”部分。
返回的搜索结果报文:
response>
lst
responseHeader"
int
status"
0<
/int>
QTime"
6<
params"
str
rows"
10<
/str>
start"
fl"
*,score<
hl"
q"
content:
"
faceted
browsing"
/lst>
result
response"
numFound="
1"
start="
0"
maxScore="
1.058217"
float
score"
1.058217<
/float>
arr
all"
str>
//localhost/myBlog/solr-rocks-again.html<
Solr
is
Great<
solr,lucene,enterprise,search,greatness<
has
some
really
great
features,
like
browsing
and
replication<
/arr>
content"
date
creationDate"
2007-01-07T05:
04:
00.000Z<
/date>
keywords"
rating"
8<
title"
url"
/result>
highlighting"
//localhost/myBlog/solr-rocks-again.html"
em>
faceted<
/em>
browsing<
/response>
1.4源码结构
1.4.1目录结构说明
我们下载的Solr包后,进入Solr所在的目录,我们可以看到以下几个目录:
build、client、dist、example、lib、site、src。
下面分别对其进行介绍。
1)build:
该目录是在antbuild过程中生成的,其中包含了未被打包成jar或是war的class文件以及一些文档文件。
2)client:
该目录包含了特定语言的Solr客户端API,使得使用其他语言的用户能通过HTTP用XML与Solr进行通话。
现在该目录里面虽然包含javascript、python、ruby三个子目录,但是到目前为止只包含一部分的ruby的代码,其他语言仍是空的。
另外,Solr的Java客户端称为SolrJ,其代码位于src/solrj目录下面。
在之后的文章中我会详细介绍Solr客户端的使用。
3)dist:
该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
还记得上一篇文章中,我们在build1.4版本的Solr源代码后需要部署example吗?
其实就是将该目录下面的apache-solr-1.4.war部署到Jetty上面去,并重命名为solr.war。
4)example:
这个目录实际上是Jetty的安装目录。
其中包含了一些样例数据和一些Solr的配置。
其中一些子目录也比较重要,这里也对它们稍作介绍。
●example/etc:
该目录包含了Jetty的配置,在这里我们可以将Jetty的默认端口从8983改为80端口。
●将其中的8983端口换成80端口。
注意更改端口后启动Jetty可能会提示你没有权限,你需要使用sudojava-jarstart.jar来运行。
●example/multicore:
该目录包含了在Solr的multicore中设置的多个home目录。
在之后的文章中我会对其进行介绍。
●example/solr:
该目录是一个包含了默认配置信息的Solr的home目录。
详见下面的“solrhome说明”
●example/webapps:
Jetty的webapps目录,该目录通常用来放置Java的Web应用程序。
在Solr中,前面提到的solr.war文件就部署在这里。
5)lib:
该目录包含了所有Solr的API所依赖的库文件。
其中包括Lucene,Apachecommonsutilities和用来处理XML的Stax库。
6)site:
该目录仅仅包含了Solr的官网的网页内容,以及一些教程的PDF文档。
7)src:
该目录包含了Solr项目的整个源代码。
这里对其各个子目录也做相应的介绍。
●src/java:
该目录存放的是Solr使用Java编写的源代码。
●src/scripts:
该目录存放的是配置Solr服务器的UnixBashShell脚本,在后面介绍多服务器配置中将会有重要的作用。
●src/solrj:
前面提到过该目录存放的是Solr的Java版本的客户端代码。
●src/test:
该目录存放的是测试程序的源代码和测试文件。
●src/webapp:
该目录存放的是管理Solr的Web页面,包括Servlet和JSP文件,其构成了前面提到的WAR文件。
管理Solr的JSP页面在web/admin目录下面,如果你有兴趣折腾Solr可以找到相应的JSP的页面对其进行设置
1.4.2Solrhome说明
所谓的Solrhome目录实际上是一个运行的Solr实例所对应的配置和数据(Lucene索引)。
在上一篇文章中我提到过在Solr的example/solr目录就是一个Solr用做示例的默认配置home目录。
实际上example/multicore也是一个合法的Sol
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 企业 搜索引擎 SOLR 应用 教程