匹配具有相同发音弹性搜索的单词

时间:2016-02-02 04:33:43

标签: elasticsearch

我想匹配拼写不同的单词,但具有相同的发音。像“邮件”和“男性”,“飞机”和“平原”。我们可以在elasticsearch中进行这样的匹配吗?

3 个答案:

答案 0 :(得分:2)

您可以使用analysis phonetic plugin执行该任务。

让我们用自定义分析器利用该插件创建一个索引:

curl -XPUT localhost:9200/phonetic -d '{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "standard",
            "lowercase",
            "my_metaphone"
          ]
        }
      },
      "filter": {
        "my_metaphone": {
          "type": "phonetic",
          "encoder": "metaphone",
          "replace": true
        }
      }
    }
  }
}'

现在让我们使用新的分析器分析您的示例。如您所见,plainplane都会生成单个令牌PLN

curl -XGET 'localhost:9200/phonetic/_analyze?analyzer=my_analyzer&pretty' -d 'plane'
curl -XGET 'localhost:9200/phonetic/_analyze?analyzer=my_analyzer&pretty' -d 'plain'

{
  "tokens" : [ {
    "token" : "PLN",
    "start_offset" : 0,
    "end_offset" : 5,
    "type" : "<ALPHANUM>",
    "position" : 1
  } ]
}

生成单个令牌mail的{​​{1}}和male也是如此:

ML

我使用过curl -XGET 'localhost:9200/phonetic/_analyze?analyzer=my_analyzer&pretty' -d 'mail' curl -XGET 'localhost:9200/phonetic/_analyze?analyzer=my_analyzer&pretty' -d 'male' { "tokens" : [ { "token" : "ML", "start_offset" : 0, "end_offset" : 4, "type" : "<ALPHANUM>", "position" : 1 } ] } 编码器,但您可以自由使用任何其他支持的编码器。您可以找到有关所有支持的编码器的更多信息:

    metaphone metaphonedouble_metaphonesoundexcaverphonecaverphone1caverphone2,{{1} Apache Codec documentation }},refined_soundexcologne beider_morse koelnerphonetikhaasephonetiknysiis 的{li>

答案 1 :(得分:1)

您可以使用语音标记过滤器来实现此目的。语音标记过滤器是一个插件,需要单独安装和设置。您可以使用此blog详细说明如何设置和使用拼音令牌过滤器。

答案 2 :(得分:0)

不需要插件的解决方案是使用Synonym Token Filter。例如:

{
"filter" : {
    "synonym" : {
        "type" : "synonym",
        "synonyms" : [
            "mail, male",
            "plane, plain"
        ]
    }
}

}

您也可以将同义词放在文本文件中并引用它,请参阅我链接到的文档以获取示例。