elasticsearch 匹配发音相同单词的方案


匹配拼写不同但发音相同的单词。像“邮件”和“男性”,我们可以在Elasticsearch中如何进行这样的匹配呢?
这就需要用到analysis-phonetic这个语音分析插件,可以使用插件管理器安裝此插件:

ES中安装analysis-phonetic插件

[root@ecs-bs bin]# ./elasticsearch-plugin install analysis-phonetic
future versions of Elasticsearch will require Java 11; your Java version from [/A_Install/java/jdk1.8.0_171/jre] does not meet this requirement
-> Downloading analysis-phonetic from elastic
[=================================================] 100%   
-> Installed analysis-phonetic

該插件必須安裝在群集中的每個節點上,並且每個節點必須在安裝後重新啟動。

index中设置phonetic分析器

phonetic令牌过滤器需要进行如下设置::

  • encoder
    使用哪个语音编码器。接受metaphone(默认), double_metaphonesoundexrefined_soundexcaverphone1caverphone2colognenysiiskoelnerphonetikhaasephonetikbeider_morsedaitch_mokotoff
  • replace
    原始令牌是否应由phonetic令牌替换。接受true(默认)和false。不支持beider_morse编码 。

index中的设置

PUT phonetic_sample
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_analyzer": {
            "tokenizer": "standard",
            "filter": [
              "lowercase",
              "my_metaphone"
            ]
          }
        },
        "filter": {
          "my_metaphone": {
            "type": "phonetic",
            "encoder": "metaphone",
            "replace": false
          }
        }
      }
    }
  }
}

注意,"replace": false可能会因为原始和语音分析器版本都在同一字段的令牌位置而导致意外行为。例如,模糊match 查询的模糊性同义词标记推理不起作用。因此,使用单独的字段进行分析和而不进行phonetic语音过滤是个明智的选择。这样的话,就可以针对具有不同的字段的搜索权重进行提升或折衷计算(例如,仅对match的原始文本字段运行模糊查询,而不对该字段进行phonetic模糊查询)。

移除插件

可以使用以下命令删除该插件:

sudo bin/elasticsearch-plugin remove analysis-phonetic

在删除插件之前,必须先停止该elasticsearch节点。

声明:梨木乔の技术栈|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - elasticsearch 匹配发音相同单词的方案


梨木乔の技术栈