Xenforo Enhanced Search 修改支持Elasticsearch的IK分词

Posted by

XFES使用ES搜索,为中文用户提供了非常可靠高效的搜索功能。原版XENFORO直接安装XFES后,使用ES搜索,即可以匹配中文搜索。不过由于elasticsearch需要安装IK分词插件,如果elasticsearch从0.98升到ES2或者ES5/ES6,就没有办法默认使用IK分词,所以需要简单修改一下XFES的代码,使用XFES在创建索引时使用IK分词,而不是使用default.
找到文件:

src\addons\XFES\Service\Analyzer.php

查找

'tokenizer' => 'standard',

更改为

'tokenizer' => 'ik_max_word',

XENFORO后台,进入增强索引设置页面 admin.php?enhanced-search,
索引配置–> 停用词 –> 使用自定义列表
输入中文停用词,然后重建所有搜索索引即可

这个选项中用的是ik_max_word分词,也可以使用ik_smart分词

如果是XFES1系列,则修改的源文件是
library\XenES\ControllerAdmin\Elasticsearch.php
查找:

case 'snowball': $analyzer = array('type' => 'snowball', 'language' => $input['stemming_language']); break;
case 'standard': $analyzer = array('type' => 'standard'); break;

替换为

>case 'snowball': $analyzer = array('type' => 'ik_max_word', 'language' => $input['stemming_language']); break;
case 'standard': $analyzer = array('type' => 'ik_max_word'); break;

One comment

  1. “XenForo不支持当前的索引配置. 此处更新索引选项将删除您现有的配置”的错误的消除办法
    src\addons\XFES\Service\Analyzer.php文件中查找:

    if ($default['type'] != 'custom' || $default['tokenizer'] != 'standard')

    替换为

    if ($default['type'] != 'custom' || $default['tokenizer'] != 'ik_max_word')

    其实就是ES搜索中将ik_max_word设置为默认的分词工具。

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注