1

所以,如果假设有这样一行:

> 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=<>.
  • 为此,空白标记器可以完美运行。但是,与此同时,我将无法搜索电子邮件 IDa@domain1.com或域 a.domain.net,因为它们包含<>字符。我想a@domain1.com成为一个象征
  • 如果我使用标准标记器,我可以搜索,a@domain1.com但这些实际上是两个标记(所以我认为它效率低下)。
  • 标准标记器破坏了我不想要的主机名 subdomain.mydomain.colo。

那么,有没有一种方法可以分析文本,使其使用标准标记器,但也不标记匹配正则表达式的单词?我是 ES 的新手,所以如果可能的话,请尝试举一个小例子,那会很棒。

我觉得与正则表达式相关的标记器可能很昂贵,所以如果有改变我可以做空白分析器 + 还保留主机名、电子邮件 ID 等标记并保留几个单词,那就太棒了。

请回答您有任何类型的输入。

PS:我在 ES 邮件列表中查看了这篇文章,但它不适用于电子邮件地址或主机名,因为我无法获得所有电子邮件地址/主机名的详尽列表。所以,我希望你能理解我的要求。

4

2 回答 2

2

Lucene 4.X 中的 StandardAnalyzer 发生了一些重大变化。而不是旧的逻辑,它现在实现了UAX#29

StandardAnalyzer 的旧样式已重命名为 ClassicAnalyzer,它使用ClassicTokenizer,它应该可以完成您想要的大部分操作(它被明确设计为将电子邮件收件人和主机名作为单个令牌处理)。

但是,我认为它不会帮助您将其解析from=<>为令牌。为此,我看到了几个选项:

  • 更改数据:由于它是您要识别的非常具体的字符串,只需将其所有实例替换为您可以轻松识别的单个标记,例如替换from=<>NULLSENDER,然后对其进行索引。
  • 创建一个自定义标记器来处理您的语法。可能最简单的方法以及 Lucene API 推荐的方法是复制 ClassicTokenizer 代码,然后从那里开始工作。

考虑到您要在那里处理的特殊情况的明显简单性,我可能会使用第一个选项,因为它应该很容易,而第二个选项可能比它的价值更麻烦。

于 2013-03-15T18:53:53.520 回答
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"
                }
            }
        }

根据您的需要搜索所有字段或特定字段。

于 2013-03-19T09:31:57.147 回答