1

我正在为弹性搜索使用语音插件过滤器。https://github.com/elastic/elasticsearch-analysis-phonetic

当我创建索引时,我正在使用以下设置创建自定义过滤器。

soundex: {
            type: "phonetic",
            encoder: "metaphone",
            replace: "true"
}

这工作正常,但正在创建最大长度为 4 个字符的变音标记,这给我的搜索结果增加了太多噪音。例如,我获得了用于避孕和控制的 KNTR(它是医疗数据)。

根据Metaphone 算法的意外结果,底层 Java API 包含一个 setMaxCodeLen 值。在elasticsearch中配置时如何设置?

我想做类似的事情:

    soundex: {
                type: "phonetic",
                encoder: "metaphone",
                replace: "true",
                maxcodelen: 8
    }

但到目前为止,我一直无法确定是否可以配置编码器以增加编码令牌的最大长度。可以这样配置吗?如果是这样,怎么做?

4

1 回答 1

2

我认为不可能配置它。我检查了插件的源代码,似乎很容易实现您的要求。

PhoneticTokenFilterFactory.java中,您将看到:

this.maxcodelength = 0;
this.replace = settings.getAsBoolean("replace", true);

如您所料,replace参数可以配置,但maxcodelenght始终设置为0. 因此,您可以通过以下方式更改该行:

this.maxcodelength = settings.getAsInt("maxcodelen", 0);

我将新属性命名为“maxcodelen”,因为它是您在示例中使用的名称。

然后您可以编译它并从本地安装修改后的插件(检查如何安装本地插件

如果一切正常,并且您愿意,请发送拉取请求 :)

于 2015-04-19T08:31:59.320 回答