Solr 和Nutch的一些资料

Apache Nutch 1.6 发布

Apache Nutch 1.6 发布,该版本修复了超过 20 个 bug,新功能包括:新的 HostNormalizer,可通过 MIME-type 和 Indexer API 的功能增强来动态设置 fetchInterval ,更新 Tika 到 1.2 版本,更新 Autimaton 到 1.11-8 版本。

Solr In action 试读本

《solr in action》这个可能是第一本关于 Solr 4.0 的书籍,看样子是还没写完,这里有第一章的文件,有兴趣的同学可以点击下载:Solr_meap_ch01

文件大小:1.44M

格式:PDF

页数:26页

 

 

带 IK 分词器的 Luke

 

 

Luke 之前的文章中有介绍过,这次提供一个带IK分词器的luke,点击这里下载。该版本是在 luke 3.5 基础上加入了 IK2012 的包,可以对solr3.5(lucene3.5)、solr3.6(lucene3.6)的词库进行查看。

这样,在 luke 的 plugins 界面中,可以下拉选择到IK 的分词器,输入相应的文本,就能查看到分词的结果。如下图所示:
Solr 和Nutch的一些资料_第1张图片在 search 界面里,也可以调出 IK 分词器对关键字进行分词,然后测试搜索结果。如下所示:

 

Solr 缓存配置(一)

缓存在 Solr 中充当了一个非常重要的角色,Solr 中主要有这三种缓存:

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

第二个是查询结果缓存:

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

第三个是文档缓存:

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

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

Apache Solr 3.6.1 发布

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

动态字段

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

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

启用 solr suggest

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

Solr 和Nutch的一些资料_第2张图片幸运的是 solr 也提供了类似的功能,在该功能的基础上,配合 jQuery 或 kissy 的自动完成组件就可以实现类似上面的功能。
启动该功能的过程大体如下:
suggest 的功能依赖拼写组件,solr_home/data 目录下会有一个 spellchecker 目录,该目录用于存放 suggest 和 拼写检查的索引库,所以要先配置 spell 功能,配置如下:
1
2
3
4
5
6
7
8
9
< 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 的处理组件和请求类,如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
< 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

会得到如下结果:
Solr 和Nutch的一些资料_第3张图片

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 来运行他,即可看如下运行界面:
Solr 和Nutch的一些资料_第4张图片
在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,将备份索引库,该命令在阶段备份索引时很有用

你可能感兴趣的:(Solr 和Nutch的一些资料)