我有点怀疑你在刷屏

对于日志场景,字段里面中英文混合,应该使用中文分词器吗?效率如何?

Elasticsearch | 作者 点火三周 | 发布于2018年12月26日 | 阅读数:3829

我司一个大型金融公司,100多个系统,统一使用filebeat采集日志,需要全文检索的字段是message,包含原始日志内容。但是不少系统的开发人员在日志里面打中文。情况是99%以上的日志都是英文,但是有1%的日志里面含有中文,比如“密码错误”等关键信息。使用默认的分词器无法对中文进行倒排索引,导致无法搜索。但若使用中文分词器,我又担心影响索引性能。有没有同学有相关经验的?望赐教
已邀请:

rochy - rochy_he

赞同来自:

直接使用默认的可以满足你的需求;无需修改
 
查询的时候使用 q=message:"密码错误" 即可搜索到相关结构

trycatchfinal

赞同来自:

我试了下,使用match查询是可以的
{
"query": {
"match": {
"message": "密码错误"
}
}
}
我测试了下,默认分词把每个汉字都当成了一个token,这样就能够理解了
GET {index}/_analyze?text="密码错误"
{
"tokens": [
{
"token": "密",
"start_offset": 1,
"end_offset": 2,
"type": "<IDEOGRAPHIC>",
"position": 1
},
{
"token": "码",
"start_offset": 2,
"end_offset": 3,
"type": "<IDEOGRAPHIC>",
"position": 2
},
{
"token": "错",
"start_offset": 3,
"end_offset": 4,
"type": "<IDEOGRAPHIC>",
"position": 3
},
{
"token": "误",
"start_offset": 4,
"end_offset": 5,
"type": "<IDEOGRAPHIC>",
"position": 4
}
]
}

点火三周

赞同来自:

默认的分词器对日志不友好,比如"com.alipay.NullpointerException",分词之后,还是“com.alipay.NullpointerException”,不会对很多特殊字符连接的字串进行拆分,所以我把使用了自己定制的tokenizer,去适配应用日志分析的场景,估计就是这个导致了无法中文分词
{
"app_template": {
"order": 0,
"index_patterns": [
"app_*"
],
"settings": {
"index": {
"refresh_interval": "15s",
"analysis": {
"analyzer": {
"message_analyzer": {
"pattern": """=|,|_|\.|\s|-|\[|\]|\*|\|""",
"tokenizer": "pattern"
}
}
},
"number_of_shards": "4",
"number_of_replicas": "1"
}
},
"mappings": {
"doc": {
"properties": {
"message": {
"type": "text",
"analyzer": "message_analyzer"
}
}
}
},
"aliases": {}
}
}


 

要回复问题请先登录注册