按子

时间:2015-10-03 19:54:10

标签: elasticsearch

我想执行这样的搜索:

搜索(文字,身份证)

它应返回与文本匹配的所有项目,但会根据与父项具有相同ID的子项的分数对结果进行排序。

假设我有一个包含以下产品的商店。孩子是由外部服务填充的类似产品,该服务使用机器学习算法来确定每个项目与其父项的相似程度。 (不使用ES相似性)

相似性得分在产品名称后面的括号中。

1 - 红色长袖衬衫

  • 2 - 红色短袖衬衫(90)
  • 3 - 蓝色长袖衬衫(90)
  • 5 - 绿色长袖衬衫(90)
  • 4 - 蓝色短袖衬衫(60)
  • 6 - 绿色短袖衬衫(60)

2 - 红色短袖衬衫

  • 1 - 红色长袖衬衫(90)
  • 4 - 蓝色短袖衬衫(90)
  • 6 - 绿色短袖衬衫(90)
  • 3 - 蓝色长袖衬衫(60)
  • 5 - 绿色长袖衬衫(60)

3 - 蓝色长袖衬衫

  • 4 - 蓝色短袖衬衫(90)
  • 1 - 红色长袖衬衫(90)
  • 5 - 绿色长袖衬衫(90)
  • 2 - 红色短袖衬衫(60)
  • 6 - 绿色短袖衬衫(60)

7 - 一个红球

  • 8 - 蓝色球(60)
  • 9 - 绿球(60)
  • 1 - 红色长袖衬衫(20)
  • 2 - 红色短袖衬衫(20)

8 - 蓝球

  • 7 - 红球(60)
  • 9 - 绿球(60)
  • 4 - 蓝色短袖衬衫(20)
  • 3 - 蓝色长袖衬衫(20)

9 - 一个绿球

  • 8 - 蓝色球(60)
  • 7 - 红球(60)
  • 6 - 绿色短袖衬衫(20)
  • 5 - 绿色长袖衬衫(20)

10 - 红蝙蝠

  • 2 - 红色短袖衬衫(20)
  • 1 - 红色长袖衬衫(20)

11 - 一个令人难以置信的球

  • 7 - 红球
  • 8 - 蓝球
  • 9 - 绿球

如果我进行以下搜索:

搜索(“红色”,1)

我应该获得包含文本“red”的所有父级(顶级)项目,但是它们应该按照与ID 1匹配的子项的分数排序

1 - 红色长袖衬衫(100)

2 - 红色短袖衬衫(90)

7 - 红球(20)

10 - 红蝙蝠(20)

11 - 一个令人难以置信的球

我不确定这是否可行,我一直在查看嵌套的聚合查询,但我不确定如何继续。任何帮助将不胜感激。

修改

阅读ES文档,我认为我需要:

a)生成术语搜索并传入ID

b)创建两个聚合

  • 首先包含具有与ID匹配的子项的结果,然后根据与ID匹配的子项的分数对结果执行内部排序

  • 第二个包含没有与ID匹配的子项的任何其他结果

c)执行多值桶排序,其中第一个聚合在第二个

之前返回

0 个答案:

没有答案