首页 文章

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

提问于
浏览
1

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

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

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

这样可以正常工作,但创建的metaphone令牌最大长度为4个字符,这会给我的搜索结果增加太多噪音 . 例如,我获得了避孕和控制的KNTR(它的医疗数据) .

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

我想做点什么:

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

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

1 回答

  • 2

    我认为配置它是不可能的 . 我已经检查了插件的源代码,看起来很容易实现你的要求 .

    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

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

相关问题