删除空格和特殊字符后,ElasticSearch会查找所有重复项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除空格和特殊字符后,ElasticSearch会查找所有重复项相关的知识,希望对你有一定的参考价值。

我们的弹性搜索群集中有大约100,000个文档。我正在尝试查找查询,以便我们可以根据某些字段找出重复的文档。我能够运行这个查询:

{
  "size": 0,
  "aggs": {
     "duplicateCount": {
        "terms": {
          "field": "name",
          "min_doc_count": 2
        },
        "aggs": {
          "duplicateDocuments": {
          "top_hits": {}
         }
     }
  }
}

但是我们的一些文件具有相似的价值。例如,两个不同的文档具有名称:“pawan”和名称:“paw-an”我们希望将它们视为相同的文档。我找不到任何方式说replaceAll然后运行此查询。有什么办法吗?我们正在使用ElasticSearch 1.5,因此对于这些功能可能太旧了。谢谢。

制图:

{
  "mappings":{
            "employeeinfo":{
                        "_all" : {"enabled" : true},
                        "properties":{
                                    "name":{
                                              “type":"string"
                                    },
                                    "age":{
                                                "type":"long"
                                    }
                        }
            }
 }
}

此致,Pawan。

答案

可以使用script in your terms aggregation而不是字段名称:

{
  "size": 0,
  "aggs": {
     "duplicateCount": {
        "terms": {
          "script": "_source.name.replaceAll('-', '')",
          "min_doc_count": 2
        },
        "aggs": {
          "duplicateDocuments": {
          "top_hits": {}
         }
     }
  }
}
另一答案

在单个查询中,Elasticsearch 1.5中无法执行此操作。我能想到的一个解决方案是你可以滚动浏览维护类似字段的哈希集的文档。迭代100,000个文档不应该是内存密集型的。

然后,您可以应用聚合查询,如下所示:

{
  "size": 0,
  "aggs": {
     "duplicateCount": {
        "terms": {
          "field": "name",
          "include": ["pawan", "paw-an"],
          "min_doc_count": 2
        },
        "aggs": {
          "duplicateDocuments": {
          "top_hits": {}
         }
     }
  }
}

以上是关于删除空格和特殊字符后,ElasticSearch会查找所有重复项的主要内容,如果未能解决你的问题,请参考以下文章

python字符串中怎么忽略空格前面的数字

iOS URL带特殊字符(汉字、空格等)导致图片加载失败

用于模式替换的 Java 正则表达式 - 特殊字符和大小写更改为空格

Python基础--字符串处理

C#删除字符串中的回车换行空格等特殊字符

javascript 删除所有特殊字符包括空格#regex #js