我想匹配拼写不同的单词,但具有相同的发音。像“邮件”和“男性”,“飞机”和“平原”。我们可以在elasticsearch中进行这样的匹配吗?
答案 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
}
}
}
}
}'
现在让我们使用新的分析器分析您的示例。如您所见,plain
和plane
都会生成单个令牌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
metaphone
,double_metaphone
,soundex
,caverphone
,caverphone1
,caverphone2
,{{1} Apache Codec documentation }},refined_soundex
,cologne
beider_morse
koelnerphonetik
,haasephonetik
和nysiis
的{li>
答案 1 :(得分:1)
您可以使用语音标记过滤器来实现此目的。语音标记过滤器是一个插件,需要单独安装和设置。您可以使用此blog详细说明如何设置和使用拼音令牌过滤器。
答案 2 :(得分:0)
不需要插件的解决方案是使用Synonym Token Filter。例如:
{
"filter" : {
"synonym" : {
"type" : "synonym",
"synonyms" : [
"mail, male",
"plane, plain"
]
}
}
}
您也可以将同义词放在文本文件中并引用它,请参阅我链接到的文档以获取示例。