solr入门

solr介绍
solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目。它的官方网址在http://lucene.apache.org/solr/ 。solr需要运行在一个servlet 容器里,例如tomcat5.5。solr在lucene的上层提供了一个基于HTTP/XML的Web Services,我们的应用需要通过这个服务与solr进行交互。

 

solr安装和配置
关于solr的安装和配置,这里也有两篇非常好的文档,作者同时也是 Lucene Java 项目的提交人和发言人:

使用Apache Solr实现更加灵巧的搜索:http://www.ibm.com/developerworks/cn/java/j-solr1/index.html

http://www.ibm.com/developerworks/cn/java/j-solr2/index.html

下面主要说说需要注意的地方。

Solr的安装非常简单,下载solr的zip包后解压缩将dist目录下的war文件改名为solr.war直接复制到tomcat5.5的webapps目录即可。注意一定要设置solr的主位置。有三种方法。我采用的是在tomcat里配置java:comp/env/solr/home的一个JNDI指向solr的主目录(example目录下),建立/tomcat55/conf/Catalina/localhost/solr.xml文件。


Solr 基础

因为 Solr 包装并扩展了 Lucene,所以它们使用很多相同的术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对 Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如 Luke)也可以使用 Solr 创建的索引。

在 Solr 和 Lucene 中,使用一个或多个 Document 来构建索引。Document 包括一个或多个 Field。Field 包括名称、内容以及告诉 Solr 如何处理内容的元数据。例如,Field 可以包含字符串、数字、布尔值或者日期,也可以包含您想添加的任何类型。Field 可以使用大量的选项来描述,这些选项告诉 Solr 在索引和搜索期间如何处理内容。我将在本文中稍后详细讨论这些选项。现在,查看一下表 1 中列出的重要属性的子集:


单个 Solr App ------------------低级版本的安装
 

 下载和安装 Tomcat,Windows 用 MSI 安装。用 tcnative.dll 文件安装它,可以安装到 C:\tomcat 目录。1)
 

 检查安装是否正确,http://localhost:8080/
 

 修改 c:\tomcat\conf\server.xml 文件,在 Connector 元素里加 URIEncoding 属性(UTF-8)。
 

 下载和解压 Solr 的zip发布包,例如解压到 c:\temp\solrZip\
 

 建一个目录叫solr,用来运行 web 应用服务器,例如 c:\web\solr\
 

 复制 c:\temp\solrZip\example\solr\ 目录下的内容到 c:\web\solr\
 

 停止 Tomcat 服务
 

 复制 c:\temp\solrZip\dist\ 目录下的 *solr*.war 文件到 c:\tomcat\webapps\
 

 重命名 *solr*.war 为 solr.war
 

 用系统的启动图标配置 Tomcat 带 -Dsolr.solr.home=c:\web\solr Java参数启动。
 

 启动 Tomcat 服务
 

 到 Solr 管理页面检查安装是否成功,http://localhost:8080/solr/admin


--------------------------------------------------------------

 

solr 伸缩性和分布式介绍

分布式解决的问题:
 当搜索执行的时间太长,或者索引太大,此时要考虑使用 solr 的分布式了。solr 分布式中,
将一个大的索引分成几个小的索引(shards,分片),放在不同的机器上。当执行搜索时,将查询划分成多个子查询,
在不同机器的索引库中执行搜索,然后将查询结果合并。这个拆分查询和合并结果的过程对用户是透明了。

索引复制解决的问题:
 •当单机的查询性能不济时,可以考虑复制出多台索引来分别承担压力,如做一个全国性的搜索,可以将索引库复制30来个,
 每个省分一个,每个省请求过来时,
 分别在自己省所分配的索引库中进行搜索
 •将索引的读写分离,也可以很好的提供性能。由一个负责写索引,然后同步到其他索引,其他索引只读,仅提供搜索。

 

Solr 缓存配置
缓存在 Solr 中充当了一个非常重要的角色,Solr 中主要有这三种缓存:
•Filter cache(过滤器缓存),用于保存过滤器(fq 参数)和层面搜索的结果
•Document cache(文档缓存),用于保存 lucene 文档存储的字段
•Query result(查询缓存),用于保存查询的结果
还有第四种缓存,lucene 内部的缓存,不过该缓存外部无法控制到。
通过这 3 种缓存,可以对 solr 的搜索实例进行调优。调整这些缓存,需要根据索引库中文档的数量,每次查询结果的条数等。
在调整参数前,需要事先得到 solr 示例中的以下信息:
•索引中文档的数量
•每秒钟搜索的次数
•过滤器的数量
•一次查询返回最大的文档数量
•不同查询和不同排序的个数
这些数量可以在 solr admin 页面的日志模块找到。假设以上的值分别为:
•索引中文档的数量:1000000
•每秒钟搜索的次数:100
•过滤器的数量:200
•一次查询返回最大的文档数量:100
•不同查询和不同排序的个数:500
然后可以开始修改 solrconfig.xml 中缓存的配置了,第一个是过滤器缓存:

<filterCache class="solr.FastLRUCache" size="200" initialSize="200" autowarmCount="100"/>

 
第二个是查询结果缓存:

<queryResultCache class="solr.FastLRUCache" size="500" initialSize="500" autowarmCount="250"/>

 
第三个是文档缓存:

<documentCache class="solr.FastLRUCache" size="11000" initialSize="11000" />

 
这几个配置是基于以上的几个假设的值进行调优的。

 

 


solr动态字段
正常情况下,需要事先把知道的字段定义在 schema.xml 中,当有不确定的字段时,这时可以使用动态字段。
这里是一个动态字段定义的示例

<dynamicField name="*_s" type="string" indexed="true" stored="true"/>

 
这样,送过来的索引数据中,如果有以 _s 结尾的字段的值都都会被按照上述的索引方式进行索引,如字段名称为title_s,content_s。
在匹配过程,如果动态字段和静态字段都符合,会优先匹配静态字段。另外动态字段的仅支持 * 这一通配符,这个通配符仅能位于开头或结尾。

 

 

 

启用 solr suggest
suggest 是搜索引擎一个方便的功能,对数据的关键字进行预测和建议,减少了用户的输。
幸运的是 solr 也提供了类似的功能,在该功能的基础上,配合 jQuery 或 kissy 的自动完成组件就
可以实现类似上面的功能。
启动该功能的过程大体如下:
suggest 的功能依赖拼写组件,solr_home/data 目录下会有一个 spellchecker 目录,该目录用于存
放 suggest 和 拼写检查的索引库,所以要先配置 spell 功能,
地址 :http://www.solrcn.com/?p=573

你可能感兴趣的:(Solr)