0

我正在寻找所有在数据库中拥有某种电子邮件的用户:

'user' :
            {         
             'properties': 
                {
                    'user_name': { 'type': 'string', 'index' : 'not_analyzed' }, 
                    'about': { 'type': 'object' },
                }
            }

about 字段是一个 JSON 对象,可能如下所示:

{"nickname":"bobby McBob", "contact":"bobmcbob@gmail.com", "hobbies":"tennis"}

但没有预定的结构。

我想以符合@ .com 模式的方式找到所有拥有字符串的用户,希望这将返回所有拥有电子邮件的用户。

我该怎么做呢?

甚至是一个简单的查询,旨在查找 gmail,例如

curl -X GET 'http://localhost:9200/index_name/user/_search' -d '{"query":{"match":{"_all":"gmail.com"}}}'

不起作用。也许我应该在索引时用不同的分析器分析对象“关于”?分离/标记它?

我应该使用不同的查询吗?

我该怎么做呢?

4

1 回答 1

0

您可以使用pattern tokenizer来捕获模式abc.com并将其用于分析器中的字段about( analyzer_emaildomain)。例如:

"analysis":{
        "analyzer":{
          "analyzer_emaildomain": {
                    "tokenizer": "emaildomain_tokenizer"
           }
        },
         "tokenizer" : {
            "emaildomain_tokenizer" : {
                "type": "pattern",
                "pattern" : "\\b[a-zA-Z0-9._%+-]+@([a-zA-Z0-9.-]+\\.com)\\b",
                "group":1
            }
        }
}

您可以在设置中看到,我捕获了第 1 组,它是在 之后@和结尾的任何字母字符,.com并将针对您的情况进行捕获gmail.com。有关模式标记器的更多信息,请访问 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-pattern-tokenizer.html

于 2014-05-19T08:20:08.553 回答