【问题标题】:Elasticsearch: Remove duplicates from search results of analyzed fieldsElasticsearch:从分析字段的搜索结果中删除重复项
【发布时间】:2015-09-18 04:24:08
【问题描述】:

我的索引中有如下条目:

 ID   BuildingName  Postalcode Type
  1   ABCD             1234     1
  2   ABCD             7890     1

我需要删除出现在“BuildingName”字段中的重复项在搜索时(不是在索引中,因为您看到它们是两个不同的条目)。最后我只想看到(任何带有搜索名称的建筑物)

ID   BuildingName  Postalcode Type
  1   ABCD             1234     1

为什么我不能使用此处所述的字段折叠/聚合 (Remove duplicate documents from a search in Elasticsearch) -> 因为我需要对 BuildingName 进行 n-gram 分析,并且字段折叠/聚合仅适用于未分析的字段。

有什么方法可以做到这一点? 所有帮助表示赞赏!谢谢!

【问题讨论】:

    标签: elasticsearch duplicate-removal


    【解决方案1】:

    BuildingName 字段添加一个子字段,该字段应为not_analyzed 或使用keyword 之类的分析器进行分析,该分析器不应过多地更改文本。当您搜索 nGram-ed 的普通 BuildingName 字段时,会在未更改的子字段上执行聚合:

    • 映射:
      "mappings": {
        "test": {
          "properties": {
            "BuildingName": {
              "type": "string",
              "analyzer": "my_ngram_analyzer",
              "fields": {
                "notAnalyzed": {
                  "type": "string",
                  "index": "not_analyzed"
                }
              }
            }
          }
        }
      }
    
    • 查询:
    {
      "query": {
        "term": {
          "BuildingName": {
            "value": "ab"
          }
        }
      },
      "aggs": {
        "unique": {
          "terms": {
            "field": "BuildingName.notAnalyzed",
            "size": 10
          },
          "aggs": {
            "sample": {
              "top_hits": {
                "size": 1
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • 感谢您的回答。执行您建议的操作对返回的字段没有影响....我想知道我是否也应该在“notAnalyzed”子字段中复制 BuildingName?因为我假设现在该子字段中实际上没有存储任何数据...
    • 什么意思?我不明白。您能否用您尝试过的内容、返回的内容以及为什么会出现问题来更新原始帖子?
    • 我将 subfiled 添加到 BuildingName 字段并在映射中将其指定为“未分析”。然后我发布了与您所写相同的查询。搜索结果与我做这一切之前一样 - 即重复 BuildingName 。
    • 请发布更新后的映射以及您返回的结果。
    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2020-03-25
    • 1970-01-01
    • 2012-02-28
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多