iSNN
V2EX  ›  Elasticsearch

Elasticsearch 类 top_hits 复杂搜索问题

By iSNN at 2022 年 6 月 14 日 · 3560 次点击
请教大佬们:
父子关系的索引,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 排序

大佬们有什么好的方法吗
4 条回复    2022-06-15 15:12:59 +08:00
mosliu
   1
mosliu  
   2022 年 6 月 14 日
感觉可以考虑用 script 自行计算 score 。
例如 parent 字段 match 后 分数赋 1000000
child 字段有的话 分数加上几百
weofuh
   2
weofuh  
   2022 年 6 月 15 日 via iPhone
should 查询
wapsscom
   3
wapsscom  
   2022 年 6 月 15 日
multi_match 可以使用 ^ 字符语法为单个字段提升权重
iSNN
   4
iSNN  
OP
   2022 年 6 月 15 日
目前处理就分两次查了,先查公司 id ,再拿公司 Id 请求一次查员工 Id...
© 2026 V2EX · 24ms · 3.9.8.5