如何在Elasticsearch泰语分词器中保留标点符号
解决Elasticsearch 7.17.1泰语文本分词保留标点的问题
你的问题核心在于**thai分词器本身会在分词阶段直接丢弃标点符号**,所以后续添加的pattern_capture过滤器根本接触不到这些标点,自然无法将其转为独立token。以下是两种无需自定义插件的可行方案:
方案一:使用官方ICU分词器(推荐)
ICU分词器是Elasticsearch官方维护的插件(需单独安装,不属于自定义插件范畴),它原生支持泰语分词,同时会将标点符号保留为独立token。
索引配置
{ "settings": { "analysis": { "analyzer": { "thai_with_punctuation": { "tokenizer": "icu_tokenizer" } } } } }
测试分析
POST /my_thai_index/_analyze { "analyzer": "thai_with_punctuation", "text": "(เปิด) ไม่ เป็น??? ??lol." }
返回结果会包含所有标点作为独立token(例如(、)、?、.等),同时泰语文本的分词结果也会正确保留。
方案二:无需额外插件的自定义分析器
如果不想安装ICU插件,可以通过字符过滤器先给标点前后添加空格,让thai分词器将标点识别为独立token:
索引配置
{ "settings": { "analysis": { "char_filter": { "punctuation_spacer": { "type": "pattern_replace", "pattern": "(\\p{Punct})", "replacement": " $1 " } }, "analyzer": { "thai_with_punctuation": { "char_filter": ["punctuation_spacer"], "tokenizer": "thai", "filter": ["trim"] } } } } }
原理说明
通过pattern_replace字符过滤器给所有标点符号的前后添加空格,让thai分词器将被空格分隔的标点视为独立token保留,同时不影响泰语文本的正常分词。
内容的提问来源于stack exchange,提问作者Linux_cat
相关产品推荐
相关产品推荐

