当前位置: 首页 > 面试题库 >

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

丁曦哲
2023-03-14
问题内容

我有一个带有大量产品属性的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”。

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



 类似资料:
  • 问题内容: 是否可以以预定顺序进行声明,即 选择ID 7,2,5,9和8 并以该顺序返回它们 ,仅基于ID字段? 这两个语句以相同顺序返回它们: 问题答案: 我不认为这是可能的,但是在这里找到了一个博客条目,似乎可以满足您的需求: 将给不同的结果 返回给定第二个参数的位置,因此对于上面的第一种情况,7的位置在集合中的位置1,2的位置在2,依此类推-mysql在内部得出类似 然后按的结果排序。

  • 问题内容: 如何仅使用一个SQL查询来获取MySQL中的最大日期和最小日期? 问题答案:

  • 这是我索引中的文档(也可以有几个): 从逻辑上讲,我试图建立这个条件: 我的问题(来自kibana): 我正在与上述范围内的字段的范围查询与上面的其他字段进行比较。但没有得到任何命中!我想检索具有在给定和日期。 在这个领域很缺乏经验,不知道为什么不起作用!请帮助如何修复此查询以做到这一点?

  • 问题内容: 有没有一种方法可以使GPS一次访问,而不必使用不断检查位置更新的弯针? 在我的场景中,我感兴趣的只是查找当前坐标,而不是与GPS卫星的连续连接。有谁知道如何做到这一点?提前致谢。 问题答案: 首先检查最近知道的位置是否是最近的。如果没有,我相信您必须设置onLocationChanged侦听器,但是一旦获得第一个有效位置,就可以随时停止更新流。 加成

  • 我想在不使用元组的情况下,从这个查询中得到DTO的结果。 @Repository公共界面CustomMapRepository扩展了JpaRepository{ } 公共类CustomMapDTO实现可序列化{ //..接受者和接受者}

  • 问题内容: 我目前正在使用ElastSearch查询,该查询当前看起来如下所示: 因此,现在当条件1或条件2匹配时,将忽略文档。查询的外观如何,以便仅忽略符合条件1和条件2的文档? 问题答案: 由于不可能更新elasticsearch版本,因此我不得不找到另一个解决方案。这对我有用: