Elasticsearch:从分析字段的搜索结果中删除重复项

Elasticsearch: Remove duplicates from search results of analyzed fields

我的索引中有如下条目:

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

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

ID   BuildingName  Postalcode Type
  1   ABCD             1234     1

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

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

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
          }
        }
      }
    }
  }
}