跳转到主要内容
东方龙马 提交于 23 June 2015

熟悉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的下载,推荐使用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。

xunsearch-01.jpg

第三部分 创建基于Search API的服务器和索引

xunsearch服务已经启动,所需的模块也已安装,那么接下来便是开工配置了。主要分为:建立一个基于XunSearchService的服务器(server)和索引(index)。

1. 创建基于Search API的服务器。

依次通过“配置”》“搜索及元数据”》“搜索 API”(/admin/config/search/search_api),进入Search API的配置页面。下面就开始添加一个服务器。

点击“添加服务器”,开始添加服务器,并配置:

xunsearch-02.jpg

上图中红色标注的4个地方,是需要注意填写和配置的。

  • 服务器名称”:可以任意填写,最好是英文或者拼音,可以有空格,
  • 服务类”:选择“XunSearchService”(这是由xunsearch模块定义的),
  • Xunsearch path”:这里默认值是:/usr/local/xunsearch/sdk/php/lib/XS.php (如果你的xunsearch安装路径不是这个,请自己配置),
  • ini name”:这里默认值是d7(也就是d7.ini,你也可以复制一份改为自己喜欢的名字,改了之后,记得也修改一下这个文件里的project的名字:project.name )。

以上信息填好以后,点击“创建服务器”按钮,这样即可创建一个服务器:

xunsearch-03.jpg

需要注意的是,最后一行的“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-04.jpg

下面我们开始创建索引,点击“添加索引”,开始添加索引,并配置:

xunsearch-05.jpg

这里有几处需要说明一下:

  • 索引名称:即索引的名字,建议用英文或者拼音,可以有空格。
  • 项目类型:这个也比较关键,我们需要索引的是文章的内容,因此这里选择“内容”。
  • 捆绑:这里是用来设置哪些内容类型需要索引,这里保持默认,即所有内容类型均索引,你可以根据自己需要勾选。
  • 服务器:选择前面创建的服务器,如"Xunsearch"。
  • 立即索引项目:此项必须勾选,否则当新的文章发布的时候会索引不到。

到这里我们就创建了一个索引,但是还是需要对这个索引做点配置工作。我们需要三个字段:节点ID、标题、Body。

节点ID和标题默认已有了,我们需要配置一下即可:

  • 节点ID:选择“Xunsearch id”
  • 标题:选择“Xunsearch title”

xunsearch-06.jpg

Body就是正文部分,默认没有,需要到下面“添加相关字段”里选择“The main body text”并添加,然后配置一下。

  • The main body text » 文本:选择“Xunsearch body”

xunsearch-07.jpg

注意:这里我们新增加了一个Body的字段,我们还需要再次回到之前创建的服务器页面,查看一下提示:

xunsearch-08.jpg

和前面的刚创建的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),点击下面的“立即索引”,即可进入生成索引:

xunsearch-09.jpg

第四部分 创建所需的Views

终于到了创建Views部分了,虽然前面文字多一些,但是有很多细节,所以不容忽视,如果你比较熟悉,可以略过。下面开始创建views。

创建一个Views,Views名字及配置可参考下图:

xunsearch-10.jpg

上图需要强调的是,显示后面,必须要选择之前建的索引名称:“Xunsearch Index”。

然后进入Views的配置界面,默认是有一个Nid字段(貌似这里用不到),我们还需要再添加3个字段:标题、日期、正文,如果需要其他字段,可以按需添加。

xunsearch-11.jpg

在上图中右侧有个“高级”,然后在“暴露的表单”下有一项是“在区块中暴露表单:”,默认是“否”,请改为“是”,这样就可以生成一个搜索表单区块。另外,还可以配置一个重置的按钮。在“暴露表单的样式:”后面有个“设置”,点开后可勾选“包括重设按钮 ”,当然如果你觉得不需要的话,可以不勾选。

xunsearch-12.jpg

设置好了之后,记得保存一下Views。

最后,将刚才暴露的表单生成的区块放置到“内容”区域。

xunsearch-13.jpg

这样,就完成了我们所有的步骤。看看我们的效果吧:

http://drupalchina.cn/search?search_api_views_fulltext=Drupal%E4%B8%AD%E5%9B%BD

xunsearch-14.jpg

具体更多细微的调整,请自己配置,如果有问题,欢迎一起交流!

在配置的过程中,遇到了各种问题,好在子强给予了很多帮助,排除了很多小问题,在此表示感谢。在此过程中,也咨询了浩江和Learning,一并谢过。

其他相关链接整理如下:

本文由Drupal中国-龙马原创,转载请注明出处,谢谢!原文链接:http://drupalchina.cn/node/5499

Drupal 版本

点击立即索引后,返回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后可以正常索引。