如何从基于字段的ElasticSearch引擎中获取唯一记录

m1m5dgzv  于 2023-02-18  发布在  ElasticSearch
关注(0)|答案(1)|浏览(174)

我有一个ElasticSearch索引来存储某个地区的餐馆列表,我使用springElasticSearch来根据给定的地理位置查询餐馆(纬度/经度)在10英里的距离内。我有一个要求,我只需要显示一个连锁餐厅一次,我在连锁餐厅的搜索结果中看到了多条记录,因为它们的名称相同,但地址不同。我只需要显示最近的连锁餐厅沿着其他独特的餐厅。有没有一个查询可以做到这一点?下面是我的代码[删除了一些东西简洁!]

public SearchHits<Results> search(List<String> items){
final NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder();
 BoolQueryBuilder termsQuery = boolQuery();
 termsQuery.should(termsQuery(entry.getKey(), items));
 boolQuery.must(termsQuery);
 // ...I do additional logic here
 searchQuery.withQuery(boolQuery);
 // apply the terms aggregation searchQuery.addAggregation(terms(CATEGORIES_KEY).field(CATEGORY).size(BUCKET_SIZE));
 Query query = searchQuery.build();
 SearchHits<Results> searchHits = elasticsearcTemplate.search(query, Results.class);
return searchHits;
}
x4shl7ld

x4shl7ld1#

我浏览了一下elasticsearch的文档,结果发现...有一个简单的解决方法:)我可以使用Collapse的collapse功能删除基于字段的重复数据,所以我只需要添加这一行:

searchQuery.withCollapseField("restaurant_name"); 
// restaurant_name is what I want unique values on

相关问题