配置单项同义词: 我好二呀=>我好饿呀。analyzer是基本的standard的分词+synonym的token filter。
_analyze分析文本
{
"analyzer": "analyzer_synonym",
"text": "我好二呀"
}
结果:
{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 4,
"type": "SYNONYM",
"position": 0
},
{
"token": "好",
"start_offset": 0,
"end_offset": 4,
"type": "SYNONYM",
"position": 1
},
{
"token": "饿",
"start_offset": 0,
"end_offset": 4,
"type": "SYNONYM",
"position": 2
},
{
"token": "呀",
"start_offset": 0,
"end_offset": 4,
"type": "SYNONYM",
"position": 3
}
]
}
问:经过standard分词器后,被分成一个一个字“我”“好”“二”“呀”,然后同义词是怎么工作的?我看同义词配置是完整的词"我好二呀",怎么能对应standard分词后的一个一个字呢?
_analyze分析文本
{
"analyzer": "analyzer_synonym",
"text": "我好二呀"
}
结果:
{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 4,
"type": "SYNONYM",
"position": 0
},
{
"token": "好",
"start_offset": 0,
"end_offset": 4,
"type": "SYNONYM",
"position": 1
},
{
"token": "饿",
"start_offset": 0,
"end_offset": 4,
"type": "SYNONYM",
"position": 2
},
{
"token": "呀",
"start_offset": 0,
"end_offset": 4,
"type": "SYNONYM",
"position": 3
}
]
}
问:经过standard分词器后,被分成一个一个字“我”“好”“二”“呀”,然后同义词是怎么工作的?我看同义词配置是完整的词"我好二呀",怎么能对应standard分词后的一个一个字呢?
1 个回复
Ombres
赞同来自:
我好二呀=>我好饿呀
这个配置对应的规则应该是
“我”“好”“二”“呀” => “我”“好”“饿”“呀”
依照这个规则 去你的tokenstream中有序匹配相关的token,然后判断是否为同义词
按我的理解,他这么实现的原因应该是为了支持词组的同义词,因为有些场景是需要将多个token映射为更少token的
常规情况,少词对多词的话,词的start_offset end_offset 会递增处理。