Apache Nutch 2.1 发布

Apache Nutch 2.1 发布,该版本修复了大约 20 个 bug,更好的 Solr 配置,更新到各个 Gora 依赖等等。详见 http://nutch.apache.org/#05+October+2012+-+Apache+Nutch+v2.1+Released

Apache Solr 4.0-beta 发布

Apache Solr 4.0-beta 发布,这是紧跟着 Lucene 4.0 beta 发布而发布。

与 4.0 alpha 比较,该版本主要提升:

* 增加 Solr Cloud 的集合管理 API
* Solr Admin UI 清晰的显示初始化 SolrCores 失败的信息
* 可更新文档可创建一个尚未存在的文档
* Solr Cloud 支持根据查询进行删除
* 默认使用 NRTCachingDirectory 来提升实时性能
* 改进 Solrj 客户端性能
* 一些 API 的更改、优化和修复

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" />

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

Apache Solr 3.6.1 发布

改版主要是跟随 Lucene 升级,Lucene 本轮升级主要是 Bug 修改

动态字段

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

这里是一个动态字段定义的示例:
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
这样,送过来的索引数据中,如果有以 _s 结尾的字段的值都都会被按照上述的索引方式进行索引,如字段名称为title_s,content_s。
在匹配过程,如果动态字段和静态字段都符合,会优先匹配静态字段。另外动态字段的仅支持 * 这一通配符,这个通配符仅能位于开头或结尾。

启用 solr suggest

suggest 是搜索引擎一个方便的功能,对数据的关键字进行预测和建议,减少了用户的输入,大体的效果如下:

suggest幸运的是 solr 也提供了类似的功能,在该功能的基础上,配合 jQuery 或 kissy 的自动完成组件就可以实现类似上面的功能。
启动该功能的过程大体如下:
suggest 的功能依赖拼写组件,solr_home/data 目录下会有一个 spellchecker 目录,该目录用于存放 suggest 和 拼写检查的索引库,所以要先配置 spell 功能,配置如下:
 <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
    <str name="queryAnalyzerFieldType">textSpell</str>
    <lst name="spellchecker">
      <str name="name">default</str>
      <str name="field">title</str>
      <str name="buildOnCommit">true</str>
      <str name="spellcheckIndexDir">spellchecker</str>
    </lst>
  </searchComponent>
上述中的 field 用于指定主索引库中用于 spellchecker 索引的数据从主索引库的那个字段来获取。buildOnCommit 该属性为 true 时,当主索引库有提交指令时,将会自动把指定字段的内容送到 spellchecker  索引库,作为拼写检查和 suggest 使用。
接下来配置 suggest 的处理组件和请求类,如下所示:
<searchComponent class="solr.SpellCheckComponent" name="suggest">
	<lst name="spellchecker">
		<str name="name">suggest</str>
		<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
		<str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookupFactory</str>
		<float name="threshold">0.005</float>
		<str name="buildOnCommit">true</str>
	</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest">
	<lst name="defaults">
		<str name="spellcheck">true</str>
		<str name="spellcheck.dictionary">suggest</str>
		<str name="spellcheck.onlyMorePopular">true</str>
		<str name="spellcheck.count">5</str>
		<str name="spellcheck.collate">true</str>
	</lst>
	<arr name="components">
		<str>suggest</str>
	</arr>
</requestHandler>
这时候重新提交数据,会发现原先为空的 spellchecker 为空的索引库中有数据了,然后打开类似这样的网址(请将q=的值换成 title 字段中有的值)

http://localhost:8983/solr/suggest/?q=%E7%94%9F

会得到如下结果:
suggestRSS

luke:lucene 索引查看工具

luke 是 lucene 索引查看工具,基于 swing 开发的,是 lucene、solr、nutch 开发过程中不可或缺的工具。在测试搜索过程,进程出现搜不到东西或者搜到的东西不是想要的结果时,这时就需要用 luke 查看一下索引库的情况,来协助排查问题。
下载:
luke 可以从 google code 上下载
只是为了使用 luke 的话,下载 jar 包即可,经常有朋友下载成了源码包,最后不知道如何运行,从 luke 在 1.0 版版本对应的是 lucene 3.0,1.0 以前的版本,如0.9,对应的 lucene 版本为 2.9,从 1.0 以后,luke 跟 lucene 的版本号一一对应了,暂时没有找到3.6版本的luke,其实可以用4.0的luke代替,可以兼容的。
假设下载了lukeall-3.5.0.jar ,然后右键点击这个 jar,打开方式中选择 java 来运行他,即可看如下运行界面:
luke
在path中写入索引库的目录,点击OK即可打开索引库。
打开索引库后可进行的操作就相对简单了,大家自行探索了,有问题 QQ 群内询问。

solr 启动小工具

在 solr 发行包中的 example 中,有一些 solr 的示例,运行起来即可体验 solr 的功能,启动 example 过程,正常需要打开命令行,cd 到 example 目录,然后运行

java -jar start.jar

启动 solr,这个在 下载和安装 solr章节已有说明,现在弄了命令行小工具,可以双击启动 solr,方法如下:

cd %~dp0
%~d0
java -jar start.jar
将以上文本另存为 bat 文件,保存在 example 目录下,这样,双击该 bat 文件即可启动 solr,
跟 tomcat 的 start.bat 功能类似。没什么技术含量,纯为了方便。

ReplicationHandler 的 HTTP API

可以通过以下 HTTP 命令来控制 ReplicationHandler 的操作
http://master_host:port/solr/replication?command=enablereplication
使主服务器的复制可用
http://master_host:port/solr/replication?command=disablereplication
使主服务器的复制不可用
http://host:port/solr/replication?command=indexversion
获得主服务器或从服务器最新的索引版本
http://slave_host:port/solr/replication?command=fetchindex
强制从服务器从主服务器拉取索引,该过程可以传递 <lst name=”slave”> 下的参数,如主服务的url、压缩参数等
http://slave_host:port/solr/replication?command=abortfetch
让某从服务器不再从主服务器拉取索引
http://slave_host:port/solr/replication?command=enablepoll
使某从服务器可以从主服务器拉取修改的索引
http://slave_host:port/solr/replication?command=details
返回配置和当前状态
http://host:port/solr/replication?command=filelist&indexversion=<index-version-number>
返回指定主机的索引文件列表,可以指定版本号
http://master_host:port/solr/replication?command=backup
如果有新的commit,将备份索引库,该命令在阶段备份索引时很有用

复制配置文件

使用 confFiles 参数指定需要复制的配置文件。只有在主服务器 conf 目录下的文件才会被复制。
solr 的配置文件复制只会发生在索引复制之后,即使主服务器中的配置文件修改了,只有在新的 commit/optimize 之后,才会发生配置文件复制。
为了防止失败,solr 在将配置文件替换到 conf 目录前,会先将配置文件复制到临时目录中。旧的配置文件会被重命名,还是放在 conf 目录下,ReplicationHandler 不会自动删除这些旧的配置文件。
当有配置文件被复制到从服务器中,ReplicationHandler 会发起一条让 core 重新加载的命令。

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress