Elasticsearch 类 top_hits 复杂搜索问题

2022-06-14 21:06:32 +08:00
 iSNN
请教大佬们:
父子关系的索引,match 一个字段,比如字段 name ,匹配父索引的 name 或子索引的 name 。

最终返回前端结构是一个父,带三子。优先匹配父 name ,然后找三个子,三子也按 name 匹配排序。如果父 name 没匹配,那就是子 name 匹配了也算。

具体场景就如 公司-员工结构,搜索的名字可能匹配公司名,或者员工名。优先匹配公司名,然后下面展示 3 个员工名。员工名也是按匹配优先度排序。

eg:
搜索 name match 张三
1. 张三有限公司(张三,王五,xx )---- 公司名含张三,员工名含张三 最优先
2. 张三无限公司( xx ,xx ,xx ) ---- 公司名含张三,员工名不含张三 次优先
3. 李四有限公司(张三,xx ,xx ) ---- 公司名不含张三,员工名含张三 最低优先
公司、员工都不含张三则不符合条件

看到个 top_hist 但里面 hits 的内容是不能 match 排序

大佬们有什么好的方法吗
1761 次点击
所在节点    Elasticsearch
4 条回复
mosliu
2022-06-14 23:14:13 +08:00
感觉可以考虑用 script 自行计算 score 。
例如 parent 字段 match 后 分数赋 1000000
child 字段有的话 分数加上几百
weofuh
2022-06-15 00:06:46 +08:00
should 查询
wapsscom
2022-06-15 10:27:32 +08:00
multi_match 可以使用 ^ 字符语法为单个字段提升权重
iSNN
2022-06-15 15:12:59 +08:00
目前处理就分两次查了,先查公司 id ,再拿公司 Id 请求一次查员工 Id...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/859623

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX