Elasticsearch Pattern_capture过滤器也会发出一个与模式不匹配的标记

时间:2014-08-18 06:38:48

标签: elasticsearch

我有一个案例,我必须从文本中找到的电子邮件中提取域名部分。我使用uax_url_email tokenizer来创建单个电子邮件。我有一个pattern_capture过滤器,它会发出" @(。+)"模式字符串。但是uax_url_email也会返回不是电子邮件的单词,而模式捕获过滤器也不会对其进行过滤。有什么建议吗?

"custom_analyzer":{
 "tokenizer": "uax_url_email",
  "filter": [
       "email_domain_filter"
   ]
}
"filter": {
  "email_domain_filter":{
           "type": "pattern_capture",
           "preserve_original": false,
            "patterns": [
                      "@(.+)"
              ]
   }
}

输入字符串:" 我的电子邮件ID是xyz@gmail.com "

输出代币: my,email,id,is,gmail.com

但我只需要 gmail.com

2 个答案:

答案 0 :(得分:1)

“如果没有任何模式匹配,或者如果preserveOriginal为true,则将保留原始令牌。”

https://lucene.apache.org/core/4_4_0/analyzers-common/org/apache/lucene/analysis/pattern/PatternCaptureGroupTokenFilter.html

尝试添加与其他令牌匹配但不包含捕获组的模式(例如“。*”)

答案 1 :(得分:0)

我遇到了同样的问题。我可以完全不使用pattern_capture来解决此问题,而是使用其他标记器:

    "pattern_capture_tokenizer": {
      "type": "pattern",
      "pattern": "^[^>]*>(?:[^>]*>){3}([^>]*)",
      "group": 1
    }         

如果pattern为空,则不像pattern_capture过滤器那样发出令牌