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が、実際には2つのトークンです(効率が悪いと思います)。
  • 標準のトークナイザーは、私が望まないホスト名 subdomain.mydomain.colo を壊します。

それで、標準のトークナイザーを使用するだけでなく、正規表現に一致する単語をトークン化しないようにテキストを分析する方法はありますか? 私はESの初心者なので、可能であれば小さな例を挙げてみてください。それは素晴らしいことです.

正規表現関連のトークナイザーは高価になる可能性があると感じているので、空白アナライザーを実行できる変更があり、さらにホスト名、電子メール ID などのトークンを保持し、いくつかの単語を保持できるようになれば、それは素晴らしいことです。

どんな種類の入力でも答えてください。

PS: ES メーリングリストでこの投稿を見ましたが、すべての電子メール アドレス/ホスト名の完全なリストを取得できないため、電子メール アドレスまたはホスト名では機能しません。ですから、私の要件を理解していただければ幸いです。

4

2 に答える 2

2

Lucene 4.X では、StandardAnalyzer にいくつかの大きな変更が加えられました。古いロジックではなく、UAX#29を実装するようになりました。

古いスタイルの StandardAnalyzer は、ClassicTokenizerを使用する ClassicAnalyzer に名前が変更されました。これは、必要なことのほとんどを行う必要があります (電子メール アドレスとホスト名を単一のトークンとして処理するように明示的に設計されています)。

from=<>ただし、トークンとして解析するのに役立つとは思いません。そのために、いくつかのオプションがあります。

  • データを変更する: 認識したい非常に具体的な文字列であるため、そのすべてのインスタンスを簡単に認識できる単一のトークンに置き換えます (たとえば、 で置き換えfrom=<>NULLSENDERからインデックスを付けます)。
  • 文法を処理するカスタム トークナイザーを作成します。おそらく最も簡単な方法であり、Lucene API が推奨していることは、ClassicTokenizer コードをコピーしてそこから作業することです。

そこで処理したい特別なケースの明らかな単純さを考慮すると、おそらく最初のオプションを使用します。これはかなり簡単なはずであり、2 番目のオプションは価値があるよりも面倒かもしれません。

于 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 に答える