所以,如果假设有这样的一行:
> Mar 14 20:22:41 subdomain.mydomain.colo postfix/smtpd[16862]: NOQUEUE:
> reject: RCPT from unknown[1.2.3.4]: 450 4.7.1 Client host rejected:
> cannot find your reverse hostname, [5.6.7.8]; from=<erp@misms.net.in>
> to=<a@domain1.com> proto=ESMTP helo=<a.domain.net> also
> from=<>
使用标准标记器时几乎没有问题。
from=<>
。 a@domain1.com
或域a.domain.net
,因为它们包含<>
个字符。我希望a@domain1.com
成为一个标记a@domain1.com
,但这些实际上是两个令牌(所以我觉得效率很低)。 那么,有没有办法分析文本,使得它使用标准的标记化器,但也没有标记化与正则表达式匹配的单词?我是ES的新手,所以如果可能的话,请尝试给出一个小例子,那将是非常棒的。
我觉得正则表达式相关的标记器可能很昂贵所以如果有变化我可以做空白分析器+同时保留令牌,如主机名,电子邮件,并保留很少的单词,那将是非常棒的。
请回答您的任何输入。
PS:我查看了这个post in ES mailing列表,但它无法用于电子邮件地址或主机名,因为我无法列出所有电子邮件地址/主机名的详尽列表。所以,我希望你理解我的要求。
答案 0 :(得分:2)
Lucene 4.X中的StandardAnalyzer发生了一些重大变化。它现在实现了UAX#29。
,而不是旧的逻辑旧式的StandardAnalyzer已经重命名为ClassicAnalyzer,它使用ClassicTokenizer,它应该可以完成你想要的大部分工作(它被明确设计为将电子邮件收件人和主机名作为单个令牌处理)。
但是,我认为它不会帮助您解析from=<>
作为令牌。为此,我看到了几个选项:
from=<>
替换为NULLSENDER
,然后索引它。考虑到你想要处理的特殊情况的简单明了,我可能会使用第一个选项,因为它应该非常简单,第二个选项可能比它的价值更麻烦。
答案 1 :(得分:0)
我认为使用不同的分析器添加多映射可以通过创建单独的案例来处理不同的场景来简化它:
"myfield": {
"type": "multi_field",
"fields": {
"myfield": {
"include_in_all": true,
"type": "string",
"index": "analyzed",
"analyzer": "myWhitespaceAnalyzer"
},
"variant1": {
"include_in_all": true,
"type": "string",
"index": "analyzed",
"analyzer": "myOtherAnalyzer"
},
"untouched": {
"include_in_all": true,
"type": "string",
"index": "not_analyzed"
}
}
}
根据您的需要搜索所有字段或特定字段。