Elasticsearch自定义pipeAnalyzer意外移除句号问题排查与解决
Elasticsearch自定义分词器pipeAnalyzer移除句号问题解答
1. 为何pipeAnalyzer会移除令牌中的句号?
你误解了pattern分词器的默认行为:
- 默认情况下,
pattern分词器的pattern参数是用来匹配需要保留的令牌内容,而非指定分隔符。你设置的pattern: "\\|"意味着只有竖线字符会被提取为令牌,其他内容都会被丢弃。 - 你实际得到的按句号分割的结果,说明自定义分词器可能未被正确应用到目标字段,或测试时误用了默认分词器(比如standard分词器,它会将句号等非单词字符作为分隔符,拆分出不含句号的令牌)。
2. 如何调整配置确保令牌中的句号不被移除?
要实现「以竖线为分隔符分词,同时保留令牌中的句号」,需修改pattern分词器配置,显式开启split_on_pattern: true,让pattern参数代表分隔符而非令牌匹配规则。
正确的pipeAnalyzer配置
{ "pipeAnalyzer": { "type": "custom", "tokenizer": { "type": "pattern", "pattern": "\\|", "split_on_pattern": true }, "filter": ["trim", "lowercase", "asciifolding"] } }
配套索引配置示例
确保创建索引时正确注册分词器,并将目标字段绑定该分词器:
{ "settings": { "analysis": { "analyzer": { "pipeAnalyzer": { "type": "custom", "tokenizer": { "type": "pattern", "pattern": "\\|", "split_on_pattern": true }, "filter": ["trim", "lowercase", "asciifolding"] } } } }, "mappings": { "properties": { "target_field": { "type": "text", "analyzer": "pipeAnalyzer" } } } }
测试验证
使用_analyzeAPI指定pipeAnalyzer测试:
POST /your_index/_analyze { "analyzer": "pipeAnalyzer", "text": "75207149.0.1_sb.research.com" }
此时会得到单个完整令牌75207149.0.1_sb.research.com;若输入带竖线的字符串如aaa.bbb|ccc.ddd,则会得到aaa.bbb和ccc.ddd两个保留句号的令牌。
内容的提问来源于stack exchange,提问作者user5301398
相关产品推荐
相关产品推荐

