V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iSNN
V2EX  ›  Elasticsearch

Elasticsearch 类 top_hits 复杂搜索问题

  •  
  •   iSNN · 2022-06-14 21:06:32 +08:00 · 1976 次点击
    这是一个创建于 900 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教大佬们:
    父子关系的索引,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-06-14 23:14:13 +08:00
    感觉可以考虑用 script 自行计算 score 。
    例如 parent 字段 match 后 分数赋 1000000
    child 字段有的话 分数加上几百
    weofuh
        2
    weofuh  
       2022-06-15 00:06:46 +08:00 via iPhone
    should 查询
    wapsscom
        3
    wapsscom  
       2022-06-15 10:27:32 +08:00
    multi_match 可以使用 ^ 字符语法为单个字段提升权重
    iSNN
        4
    iSNN  
    OP
       2022-06-15 15:12:59 +08:00
    目前处理就分两次查了,先查公司 id ,再拿公司 Id 请求一次查员工 Id...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2554 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:41 · PVG 14:41 · LAX 22:41 · JFK 01:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.