我有一个带有大量产品属性的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怎么可能?感谢您的想法!
我不清楚您的用例。您实际上在索引什么?如果您对汽车进行索引,则应该像这样对它进行索引:
{ "color": "Green", "manufacturer": "Toyota", "category": "Cabrios" }
也就是说,根据您提出的问题:
您可能可以将字段定义为not_indexed。这样,如果在“名称”字段中搜索“ Green Toyota Cabrios”,则不会获得“ Cabrios Hardtop”。
不确定我是否真的回答过,但看不到您的用例…