1

我有一个包含大量产品属性的 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 怎么可能?谢谢你的想法!

4

1 回答 1

0

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

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

也就是说,从你问的问题来看:

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

不确定我是否真的回答了,但我没有看到您的用例...

于 2013-01-25T15:59:36.477 回答