我想执行这样的搜索:
搜索(文字,身份证)
它应返回与文本匹配的所有项目,但会根据与父项具有相同ID的子项的分数对结果进行排序。
假设我有一个包含以下产品的商店。孩子是由外部服务填充的类似产品,该服务使用机器学习算法来确定每个项目与其父项的相似程度。 (不使用ES相似性)
相似性得分在产品名称后面的括号中。
1 - 红色长袖衬衫
2 - 红色短袖衬衫
3 - 蓝色长袖衬衫
7 - 一个红球
8 - 蓝球
9 - 一个绿球
10 - 红蝙蝠
11 - 一个令人难以置信的球
如果我进行以下搜索:
搜索(“红色”,1)
我应该获得包含文本“red”的所有父级(顶级)项目,但是它们应该按照与ID 1匹配的子项的分数排序
1 - 红色长袖衬衫(100)
2 - 红色短袖衬衫(90)
7 - 红球(20)
10 - 红蝙蝠(20)
11 - 一个令人难以置信的球
我不确定这是否可行,我一直在查看嵌套的聚合查询,但我不确定如何继续。任何帮助将不胜感激。
修改
阅读ES文档,我认为我需要:
a)生成术语搜索并传入ID
b)创建两个聚合
首先包含具有与ID匹配的子项的结果,然后根据与ID匹配的子项的分数对结果执行内部排序
第二个包含没有与ID匹配的子项的任何其他结果
c)执行多值桶排序,其中第一个聚合在第二个
之前返回