如何增加 elasticsearch metaphone 语音过滤器的最大代码长度?

How do you increase the max code length of an elasticsearch metaphone phonetic filter?

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

当我创建索引时,我正在创建一个具有以下设置的自定义过滤器。

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

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

根据 Unexpected results from Metaphone algorithm 基础 Java API 包含一个 setMaxCodeLen 值。在elasticsearch中配置的时候怎么设置?

我想做这样的事情:

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

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

我认为无法配置它。我查看了插件的源代码,似乎很容易实现你所要求的。

PhoneticTokenFilterFactory.java你会看到:

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

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

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

我将新名称命名为 属性 "maxcodelen" 因为这是您在示例中使用的名称。

然后就可以在本地(check how to install local plugins)编译安装修改后的插件了

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