lucene 匹配ELK中特定位置的电子邮件地址子字符串

yrdbyhpb  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(246)

我正在尝试从ELK Kibana discover部分的消息字段中查找与电子邮件匹配的数据,我使用以下方法获得结果:
@message:"abc@email.com"
但是,生成的结果包含一些其他邮件,其中电子邮件不应匹配,我无法建立解决方案。
结果为(* 出于安全原因,数据已被清理 ):
[2020-07-07 12:54:51.105] [第一批病人名单]:[abcdefg] [JID-5c] [数据]列表_查找:abc@email.com|配置文件中的用户列表|姓名|用户名:
[2020-07-07 12:38:36.755] [第二届会议议程]:[abcdefg] [JID-ed 2] [数据]列表查找:abc@email.com|配置文件中的用户列表|姓名|用户名:
[2020-07-07 12:19:48.141] [PID-3] [abc@email.com]:[c5] [数据]在11毫秒内完成200次OK @id:355501617979964834
[2020-07-07 11:19:48.930] [PID-5] [abc@email.com]:[542] [数据]在9毫秒内完成200次OK @id:35550081535
而我希望它是:
[2020-07-07 12:19:48.141] [PID-3] [abc@email.com]:[c5] [数据]在11毫秒内完成200次OK @id:355501617979964834
[2020-07-07 11:19:48.930] [PID-5] [abc@email.com]:[542] [数据]在9毫秒内完成200次OK @id:35550081535
我试过使用@message: "[PID-*] [abc@email.com]"@message: "\[PID-*\] \[abc@email.com\] \:"@message: "[abc@email.com]"@message: *abc@email.com*和一些更类似的搜索,但都没有成功。
请让我知道我在这里错过了什么,以及如何在ELK kibana中使用discover和KQL/Lucene进行有效的潜文本搜索。
下面是我的索引的Map(
我正在从cloudwatch日志中获取数据 *):

{
   "cwl-*":{
      "mappings":{
         "properties":{
            "@id":{
               "type":"string"
            },
            "@log_stream":{
               "type":"string"
            },
            "@log_group":{
               "type":"string"
            },
            "@message":{
               "type":"string"
            },
            "@owner":{
               "type":"string"
            },
            "@timestamp":{
               "type":"date"
            }
         }
      }
   }
}
qvk1mo1f

qvk1mo1f1#

正如@Gibbs已经提到的原因all your data contains字符串abc@email.com,通过查看您的Map,现在确认您正在使用string字段,而没有显式分析器将使用default standard analyzer
相反,您应该将获取邮件ID的字段Map到使用不拆分文本的UAX URL Email tokenizer的自定义分析器。
关于如何使用示例创建此分析器的示例

使用自定义电子邮件分析器进行Map

{
    "settings": {
        "analysis": {
            "analyzer": {
                "email_analyzer": {
                    "tokenizer": "my_tokenizer"
                }
            },
            "tokenizer": {
                "my_tokenizer": {
                    "type": "uax_url_email"
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "email": {
                "type": "text",
                "analyzer": "email_analyzer"
            }
        }
    }
}

分析API响应

POST http://{{主机名}}:{{端口}}/{{索引名称}}/_分析

{
    "analyzer": "email_analyzer",
    "text": "abc@email.com"
}

{
    "tokens": [
        {
            "token": "abc@email.com",
            "start_offset": 0,
            "end_offset": 13,
            "type": "<EMAIL>",
            "position": 0
        }
    ]
}
q9yhzks0

q9yhzks02#

您的所有结果都包含abc@gmail.com。因此这是预期的。
[abc@gmail.com]标记为

{
    "tokens": [
        {
            "token": "abc",
            "start_offset": 1,
            "end_offset": 4,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "gmail.com",
            "start_offset": 5,
            "end_offset": 14,
            "type": "<ALPHANUM>",
            "position": 1
        }
    ]
}

如果你有一个电子邮件字段,你可以使用它。或者你需要改变你的Map为该字段。
如果没有回答您的问题,是否可以使用http://host:port/indexName/_mapping为该字段添加Map

相关问题