【问题标题】:Elasticsearch to wildcard search email addressesElasticsearch 到通配符搜索电子邮件地址
【发布时间】:2023-03-03 18:21:01
【问题描述】:

我正在尝试将 elasticsearch 用于我正在进行的项目。我想知道是否有人可以帮助我朝着正确的方向前进。我正在使用一个包含 100+ 百万条记录的索引。

我需要能够使用如下通配符查询进行搜索:

b*g@gmail.com
b*g@*.com
*gus@gmail.com
br*gu*@gmail.com
*g*@*

当我尝试使用通配符和其他搜索时,我没有得到完全预期的结果。

我应该考虑实施哪种类型的 elasticsearch 搜索? ElasticSearch 甚至是正确的工具吗?我从中提取的来源是 Mysql,所以如果不是,我可以考虑使用 Sphinx 或 Solr。

【问题讨论】:

标签: elasticsearch


【解决方案1】:

我假设您已经按照here 的描述尝试了通配符查询。

但是,如果您的电子邮件经过分析与未分析,它的行为就会大不相同。我建议您删除索引并更改映射。例如

PUT /emails
{
    "mappings": {
        "email":  {
            "properties": {
                "email": {
                "type": "string",
                "index": "not_analyzed"
             }
        }
     }
  }
}

一旦你有了这个,你就可以做普通的通配符查询或query_string。例如

GET emails/_search
{
  "query": {
    "wildcard": {
      "email": {
        "value": "s*com"
      }
    }
  }
}

顺便说一句,当您只是索引电子邮件而不将其设置为 not_analyzed 时,默认映射实际上会从域中拆分电子邮件前缀,这就是为什么您在执行 s*@gmail.com 时没有得到结果的原因.您仍然可以获得 s* 或 *gmail.com 的结果,但对于您的情况,使用 not_analyzed 可以正常工作。如果您想支持不区分大小写,那么您可能需要查看使用 uax_url_email 标记器的自定义分析器,如 here 所述。

【讨论】:

  • not_analyzed 不是有效的索引映射选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2020-12-04
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多