pattern分词器是否支持多语言?非英文文本无分词结果问题问询
问题原因与解决方案
为什么俄语文本返回空tokens?
pattern分词器默认使用的正则表达式是\W+,这个规则里的“单词字符”\w仅包含拉丁字母(A-Za-z)、数字(0-9)和下划线,俄文的西里尔字母不在这个范围内,会被判定为非单词字符。当整个文本都被匹配成分隔符时,自然输出空的tokens数组。
解决方法:自定义pattern分词器
你需要修改pattern的正则规则,让它识别Unicode范围内的字母(包括西里尔字母)。可以用Unicode属性定义分隔符,比如匹配非字母字符作为分隔符:
- 创建包含自定义pattern分词器的索引:
PUT /my_index { "settings": { "analysis": { "analyzer": { "unicode_pattern_analyzer": { "type": "pattern", "pattern": "\\P{L}+", // 匹配任意非Unicode字母的字符作为分隔符 "lowercase": true // 可选:将分词结果转为小写 } } } } }
- 测试俄语文本分词:
POST /my_index/_analyze { "analyzer": "unicode_pattern_analyzer", "text": "БЫСТРЫХ бурых лисицы." }
返回的有效tokens如下:
{ "tokens": [ { "token": "быстрых", "start_offset": 0, "end_offset": 7, "type": "word", "position": 0 }, { "token": "бурых", "start_offset": 8, "end_offset": 13, "type": "word", "position": 1 }, { "token": "лисицы", "start_offset": 14, "end_offset": 21, "type": "word", "position": 2 } ] }
补充说明
如果需要同时保留数字和下划线作为单词部分,可将正则修改为[^\\p{L}\\p{N}_]+。默认的pattern分词器是针对拉丁字母场景设计的,要适配其他语言必须自定义正则规则。
内容的提问来源于stack exchange,提问作者Moriel
相关产品推荐
相关产品推荐

