与一组通配符字符串进行弹性匹配

时间:2019-05-28 07:36:38

标签: elasticsearch kibana

我有一个数据库,可以容纳从客户那里获得的所有技术支持电话。一些客户比其他客户更重要。首先,某些人不应该打电话。

现在,我正在尝试查找与数字集匹配的所有字符串。我有大约200个要查看的电话号码清单。当我不知道数字中是否包含国家代码或诸如此类的东西时,弹性数据就会以这种方式存储。因此,我将不得不使用通配符搜索每个数字。

我有一个csv文件,其中存储着这样的数字:

"323555421","Joe Blow","Management Inc"
"707555421","Douggie","Multinational Inc"

这是我能想到的最简单的解决方案:

GET /_search
{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "bool": {
          "should": [
            {"query": {"wildcard": {"phone": {"value": "*3235554121"}}}},
            {"query": {"wildcard": {"phone": {"value": "*8185554121"}}}},
//...100 more records
            {"query": {"wildcard": {"phone": {"value": "*7075554121"}}}},
            {"query": {"wildcard": {"phone": {"value": "*2025554121"}}}}
          ]
        }
      }
    }
  }
}

除了它看起来很难看,我无法将它提供给我的用户外,没有人愿意坐在那里并使用sublime来转换这个查询通配符电话怪兽中的电话号码的简单列表。

另外,当我找到某些东西时,除非搜索原始的csv文件,否则我将无法知道该人的名字。

我可以将CSV上传到Elastic中并合并,但是不知道如何轻松地做到这一点。

在一个简单查询中可以用SQL解决的问题变成了弹性方面的重大灾难。谁有什么主意?

谢谢!

0 个答案:

没有答案