欢迎各位兄弟 发布技术文章
这里的技术是共享的
本文主要讲解drupal和Apache solr-3.x的集成以及对中文分词的处理,如需详细了解Drupal Search以及Apache solr的工作原理,请参阅前文《Drupal北京聚会主题之 – Apache Solr》。
在默认情况下,Drupal6使用的是Apache Solr 1.4版本,但是Apache Solr新版本已经升级到了3.x,所以1.x版本可能会慢慢不再支持,所以升级到Apache Solr 3.x还是很有必要的,我们这里做一下简要的介绍以及在Drupal Apachesolr中如何处理中文分词的相关问题。
升级到apachesolr 3.x
由于版本的兼容问题,我们选择第一个3.x版本,Apache Solr-3.1.0作为Apache Solr的主版本,来与Drupal6一起测试。首先要安装Drupal的apachesolr模块,具体的安装操作在Drupal Apchesolr模块的README.txt里面有详细说明,在这只大概列举一下。
下载apachesolr模块
下载SolrPhpClient包,具体参考apacheslor README文件
从Apache网站下载solr包
把drupal apachesolr中的schema.xml和solrconfig.xml拷贝到solr的example/solr/conf/下(注意备份源文件)
到solr的example下,java -jar start.jar 启动SOLR
在笔者测试3.1.0的过程中,没有发现不兼容的情况,一切能正常工作。但是Solr 3.1.0带来了几个新的字段类型,在默认的schema文件并没有体现,所有我们可以把这几个字段添加到schema文件中。
其中主要是location字段,用于标记坐标值。然后可以写自定义代码,把这种location字段添加到apachesolr的document中。
注意:由于升级的原因,一些旧的类可能被弃用,所以在启动的时候,我们能发现很多类似下面的warning,如何修正,请参阅Solr官方文档说明。
中文分词以及搜索
安装中文分词包
中文分词我们选择IKAnalyzer包,官方地址:http://code.google.com/p/ik-analyzer/。
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。
注意:本文中使用的是最新版本,3.2.8版本。
下载好jar包之后,放到solr/WEB-INF/lib。
注意:如果是使用的是一个单独的solr.war文件,没法打开WEN-INF/lib文件夹,需要把jar放到servlet能加载到的地方。也可以把IKAnalyzer包重新打包到solr.war里面再部署。笔者使用jetty,把IKAnalyzer放到了jetty自动生成的解压工程项目下面,如work/Jetty_0_0_0_0_8983_solr.war__solr__k1kf17/WEB-INF/lib。
修改schema文件
使用中文字段有两种方法,
1. 定义一种新字段类型,类似solr中schema文件里面的注释,然后把document中的中文字段,设置为该类型。
上面的代码定义了一种新的类型的字段,如果我们要定义中文字段,只需把上面的analyzer修改成org.wltea.analyzer.solr.IKTokenizerFactory即可。
比如,我们可以定义一种字段类型叫text_zh,然后在fields里面定义新的field,type设置成text_zh即可。
2. 修改现有字段
为了简洁,我们可以直接修改FieldType里面对text的定义,把tokenizer全部修改成org.wltea.analyzer.solr.IKTokenizerFactory,然后可以删掉一些用不上的filter。如下:
修改完之后,重启solr服务器。然后在Drupal里面重新运行solr的index,进行测试。
测试结果
无中文分词包
这个界面是在没有使用中文分词时,建立索引之后的页面,没有搜索到任何我们想要的结果。
这里,我们可以使用solr自带的工具来分析一下,地址如下:
http://127.0.0.1:8983/solr/admin/analysis.jsp
输入一段中文,结果如下
可见,默认的分词——按照空格分词——并不能很好的进行中文分词,所以我们通过solr根本没法搜索出我们想要的结果。
中文分词
同样地,我们可以使用solr自带的分析工具测试结果 http://127.0.0.1:8983/solr/admin/analysis.jsp
如图,分词包工作良好。由于我们还没有设置相应的过滤词,所以索引结果里面会出现一些没有意义的词,比如“在”、“的”等。具体的设置,IKAnalyzer的文档里面有详细的说明,本文就不做赘述。
至此,Drupal6与ApacheSolr-3.1.0的集成以及中文分词包的安装测试完成,使用ApacheSolr可以很大的提高Drupal性能,提高网站效率。当然,在具体实践中可能出现其他相关问题,我们会在以后的篇幅中另行讨论。
参考文章:
Drupal北京聚会主题之 – Apache Solr
Geospatial Apache Solr searching in Drupal 6 by upgrading Solr to 3.1
solr 3.4配置中文分词IKAnalyzer3.2.8
PS:参考新篇 《Apache Solr 快速启动包以及中文分词集成》
声明: 本站所有文章欢迎转载,所有文章未说明,均属于原创,转载均请注明出处。
本文有效链接: http://www.drupal001.com/2012/03/drupal-apachesolr3-chinese/
版权所有: Drupal与高性能网站架构 http://www.drupal001.com
来自 http://www.drupal001.com/2012/03/drupal-apachesolr3-chinese/