【问题标题】:How do you increase the max code length of an elasticsearch metaphone phonetic filter?如何增加弹性搜索变音位语音过滤器的最大代码长度?
【发布时间】:2026-02-22 08:50:01
【问题描述】:

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

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

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

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

根据Unexpected results from Metaphone algorithm,底层Java API 包含一个setMaxCodeLen 值。在elasticsearch中配置时如何设置?

我想做这样的事情:

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

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

【问题讨论】:

    标签: elasticsearch elasticsearch-plugin metaphone


    【解决方案1】:

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

    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)编译并安装修改后的插件

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

    【讨论】: