熟悉Drupal的人可能都知道,Drupal默认的搜索对中文的分词索引很不好,目前,只能通过第三方的分词组件来做优化。之前phpartisan已经分享了两篇基于Solr的配置过程,有兴趣可以看看:上篇,下篇。
除了Solr,还有一些其他也很不错的分词方案,比如国人开发的Xunsearch(迅搜)。Drupal社区的浩江和子强在2014年一起编写了xunsearch模块,并贡献到了官网,目前已发布到官网 Search API Xunsearch (D7,D8版本均支持)。
相比Solr,需要服务器另外开启Tomcat服务,这个势必会增加内存的消耗,进一步增加服务器的成本。Xunsearch是基于PHP开发,无需另外开启其他第三方服务。
浩江曾写了一篇博文介绍此模块,也是本文非常重要的一篇参考资料,但是有一些细节没有点到,龙马也走了不少弯路。为了能够方便更多人快速正确搭建基于xunsearch的分词搜索解决方案,因此龙马特意花一些时间将部署和配置过程做一个记录,让需要的人少走弯路,当然,如果本文有配置不正确或者可以优化的,欢迎批评指正。
本文基于在Centos系统,介绍安装和配置Xunsearch。
这里大致分为以下几个步骤来介绍:
- 下载和安装xunsearch组件
- 安装Xunsearch、Search API、Facet API等模块
- 创建基于Search API的服务器和索引
- 创建所需的Views
接下来,我们将分别做进一步的介绍。
第一部分 下载和安装xunsearch组件
这里我们首先介绍在服务器上安装xunsearch,它的官网也有详细的安装步骤,这里龙马也参考并做了细化,供参考:
1. 下载xunsearch。
wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 tar -xjf xunsearch-full-latest.tar.bz2
备注:龙马用的是阿里云主机,用root账号登录,默认是下载到/root目录下,如果你不想下载到这里,也可以使用cd命令切换到你想要下载的目录。
我使用的是默认的目录,当前版本是:xunsearch-full-1.4.9,因此位置在:/root/xunsearch-full-1.4.9。(xunsearch会不断更新,因此这个版本可能会不同,可参考修改)
2. 安装xunsearch。
cd xunsearch-full-1.4.9/ sh setup.sh
在安装过程中,会让你确认xunsearch将安装到哪个目录,xunsearch模块设定默认的目录是:/usr/local/xunsearch/,当然这个也是可以在模块后台配置的,为了简便,我这里就使用默认推荐的目录。
输入安装目录之后,继续安装。安装过程大概1-2分钟,之后需要重启一下xunsearch。
3. 重新启动xunsearch服务。
cd /usr/local/xunsearch/ bin/xs-ctl.sh restart
在xunsearch正常启动后,我们的第一部分,就可以完成了。当然,如果你想设置xunsearch命令自动加到server启动项里,请参考这篇文章:http://blog.itpub.net/23169974/viewspace-752480/。
第二部分 安装Xunsearch、Search API、Facet API等模块
在准备好xunsearch服务之后,下面就可以开始安装xunsearch及相关的模块了:
- Xunsearch:https://www.drupal.org/sandbox/haojiang/2226967
- Search API:https://www.drupal.org/project/search_api
- Facet API:https://www.drupal.org/project/facetapi
这里需要说明的是xunsearch的下载,推荐使用git方式下载:
git clone --branch 7.x-1.x http://git.drupal.org/sandbox/haojiang/2226967.git xunsearch cd xunsearch
提醒:需要注意的是不要下载模块页的那个附件压缩包,那个代码会导致views界面报错,如果不方便git下载,可以到本篇文章的附件里下载,地址:http://drupalchina.cn/sites/default/files/xunsearch.zip
其他模块正常下载安装即可,不再细说。下面就是启用4个模块:Search API、Search facets、Search views、xunsearch。
第三部分 创建基于Search API的服务器和索引
xunsearch服务已经启动,所需的模块也已安装,那么接下来便是开工配置了。主要分为:建立一个基于XunSearchService的服务器(server)和索引(index)。
1. 创建基于Search API的服务器。
依次通过“配置”》“搜索及元数据”》“搜索 API”(/admin/config/search/search_api),进入Search API的配置页面。下面就开始添加一个服务器。
点击“添加服务器”,开始添加服务器,并配置:
上图中红色标注的4个地方,是需要注意填写和配置的。
- “服务器名称”:可以任意填写,最好是英文或者拼音,可以有空格,
- “服务类”:选择“XunSearchService”(这是由xunsearch模块定义的),
- “Xunsearch path”:这里默认值是:/usr/local/xunsearch/sdk/php/lib/XS.php (如果你的xunsearch安装路径不是这个,请自己配置),
- “ini name”:这里默认值是d7(也就是d7.ini,你也可以复制一份改为自己喜欢的名字,改了之后,记得也修改一下这个文件里的project的名字:project.name )。
以上信息填好以后,点击“创建服务器”按钮,这样即可创建一个服务器:
需要注意的是,最后一行的“server index Config info you should config your xunsearch server flowing this section and be insure that only one title and body type appear”后面的一列非常重要,后面我们还会按照这里的提示修改d7.ini这样的文件,具体我们会在后面介绍。
2. 创建基于Search API 的索引。
服务器创建好了之后,就可以创建基于这个服务器的索引了。
点击面包屑中的“搜索API”,返回到Search API的配置界面,这里我们可以看到上面创建的“Xunsearch”服务器。
下面我们开始创建索引,点击“添加索引”,开始添加索引,并配置:
这里有几处需要说明一下:
- 索引名称:即索引的名字,建议用英文或者拼音,可以有空格。
- 项目类型:这个也比较关键,我们需要索引的是文章的内容,因此这里选择“内容”。
- 捆绑:这里是用来设置哪些内容类型需要索引,这里保持默认,即所有内容类型均索引,你可以根据自己需要勾选。
- 服务器:选择前面创建的服务器,如"Xunsearch"。
- 立即索引项目:此项必须勾选,否则当新的文章发布的时候会索引不到。
到这里我们就创建了一个索引,但是还是需要对这个索引做点配置工作。我们需要三个字段:节点ID、标题、Body。
节点ID和标题默认已有了,我们需要配置一下即可:
- 节点ID:选择“Xunsearch id”
- 标题:选择“Xunsearch title”
Body就是正文部分,默认没有,需要到下面“添加相关字段”里选择“The main body text”并添加,然后配置一下。
- The main body text » 文本:选择“Xunsearch body”
注意:这里我们新增加了一个Body的字段,我们还需要再次回到之前创建的服务器页面,查看一下提示:
和前面的刚创建的server截图的比较,我们会发现多了一个[body:value]这一项,下面是我参照这个修改后的d7.ini:
project.name = d7 project.default_charset = utf-8 server.index = 8383 server.search = 8384 [id] type = id [nid] type = numeric [title] type = title [search_api_language] type = string index = self [body:value] type = body [status] type = numeric [contenttype] type = string index = self [created] type = numeric [changed] type = numeric [taxonomy] type = string [author] type = string
修改好之后,我们将d7.ini上传至:/usr/local/xunsearch/sdk/php/app/。记得重启一下xunsearch:
cd /usr/local/xunsearch/ bin/xs-ctl.sh restart
接下来,我们还需要将索引批量生成一遍。这个很简单,我们回到“查看”索引页面(我们这里是:/admin/config/search/search_api/index/xunsearch_index),点击下面的“立即索引”,即可进入生成索引:
第四部分 创建所需的Views
终于到了创建Views部分了,虽然前面文字多一些,但是有很多细节,所以不容忽视,如果你比较熟悉,可以略过。下面开始创建views。
创建一个Views,Views名字及配置可参考下图:
上图需要强调的是,显示后面,必须要选择之前建的索引名称:“Xunsearch Index”。
然后进入Views的配置界面,默认是有一个Nid字段(貌似这里用不到),我们还需要再添加3个字段:标题、日期、正文,如果需要其他字段,可以按需添加。
在上图中右侧有个“高级”,然后在“暴露的表单”下有一项是“在区块中暴露表单:”,默认是“否”,请改为“是”,这样就可以生成一个搜索表单区块。另外,还可以配置一个重置的按钮。在“暴露表单的样式:”后面有个“设置”,点开后可勾选“包括重设按钮 ”,当然如果你觉得不需要的话,可以不勾选。
设置好了之后,记得保存一下Views。
最后,将刚才暴露的表单生成的区块放置到“内容”区域。
这样,就完成了我们所有的步骤。看看我们的效果吧:
http://drupalchina.cn/search?search_api_views_fulltext=Drupal%E4%B8%AD%E5%9B%BD
具体更多细微的调整,请自己配置,如果有问题,欢迎一起交流!
在配置的过程中,遇到了各种问题,好在子强给予了很多帮助,排除了很多小问题,在此表示感谢。在此过程中,也咨询了浩江和Learning,一并谢过。
其他相关链接整理如下:
- Xunsearch官网安装文档:http://www.xunsearch.com/doc/php/guide/start.installation
- 浩江的博文介绍:http://www.trackself.com/archives/2539.html
- Xunsearch官网项目配置详解: http://www.xunsearch.com/doc/php/guide/ini.guide
- Xunsearch模块地址: https://www.drupal.org/sandbox/haojiang/2226967
本文由Drupal中国-龙马原创,转载请注明出处,谢谢!原文链接:http://drupalchina.cn/node/5499
xunsearch使用总结1-不能正常索引
点击立即索引后,返回500错误。查看日志发现有PHP Fatal error: Call to undefined function deleteItem() in sites/all/modules/xunsearch/xunsearchservice.inc on line 326错误,将xunsearchservice.inc 326行和329行处的deleteItem 改成 $this->deleteItem后可以正常索引。