一尘不染

Elasticsearch在一次查询中获得一组预定义类型的结果

elasticsearch

我有一个带有大量产品属性的ElasticSearch索引。他们都看起来像这样:

{'_id':1,'type':'manufacturer','name':'Toyota'},
{'_id':2,'type':'color','name':'Green'},
{'_id':3,'type':'category','name':'SUV Cars'},
{'_id':4,'type':'material','name':'Leather'},
{'_id':5,'type':'manufacturer','name':'BMW'},
{'_id':6,'type':'color','name':'Red'},
{'_id':7,'type':'category','name':'Cabrios'},
{'_id':8,'type':'material','name':'Steel'},
{'_id':9,'type':'category','name':'Cabrios Hardtop'},
{'_id':10,'type':'category','name':'Cabrios Softtop'},
... and 1 Mio. more ...

现有4种不同的产品属性:类别,制造商,颜色和材料。

问题:如何 只用一个查询 (这是对性能的要求) 对每种类型最佳匹配结果进行查询

因此,如果我请求全文搜索查询,即“ Green Toyota Cabrios”,我应该得到以下结果:

{'_id':2,'type':'color','name':'Green'},
{'_id':1,'type':'manufacturer','name':'Toyota'},
{'_id':7,'type':'category','name':'Cabrios'},
{one matching result of the 'material'-type if found by the query}

那将是一个理想的结果集, 始终最多有4个结果(对于每个“类型”一个结果) 。如果 没有可用的特定类型的匹配结果,则应仅返回3个结果项

Elasticsearch怎么可能?感谢您的想法!


阅读 180

收藏
2020-06-22

共1个答案

一尘不染

我不清楚您的用例。您实际上在索引什么?如果您对汽车进行索引,则应该像这样对它进行索引:

{
  "color": "Green",
  "manufacturer": "Toyota",
  "category": "Cabrios"
}

也就是说,根据您提出的问题:

您可能可以将字段定义为not_indexed。这样,如果在“名称”字段中搜索“ Green Toyota Cabrios”,则不会获得“ Cabrios
Hardtop”。

不确定我是否真的回答过,但看不到您的用例…

2020-06-22