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

ES 如何实现这种多维度多条件的搜索?

  •  
  •   knightdf · 2022-06-13 11:30:43 +08:00 · 2862 次点击
    这是一个创建于 924 天前的主题,其中的信息可能已经有所发展或是发生改变。

    奈何 ES 搜索玩的不 6 ,请教大佬 ES 搜索怎么实现这种类似 Linkedin 的搜索?
    每个维度可以选择 0 个,1 个或多个条件

    Screen Shot 2022-06-13 at 11.22.22.png

    19 条回复    2022-06-14 08:42:15 +08:00
    hush3
        1
    hush3  
       2022-06-13 14:16:54 +08:00
    should + terms ?
    knightdf
        2
    knightdf  
    OP
       2022-06-13 15:28:36 +08:00
    @hush3 比如以 Linkedin 为例,revenue 1-10, headcount 501-1000 或者 1001-5000 ,should 会全部当成 OR 来链接吧?但是 revenue 和 headcount 其实是 AND 链接
    hush3
        3
    hush3  
       2022-06-13 16:19:29 +08:00
    我也是菜鸡。。如果是我可能会这么写,就是多套几个。。不知道行不行
    bool: {
    must[{
    range: {
    revenue: 1 - 10
    }
    }, {
    bool: {
    should: [
    range: headcount: 501 - 1000,
    range: headcount: 1001 - 5000,
    min_shouldmatch: 1
    ]
    }
    }

    ]
    }
    knightdf
        4
    knightdf  
    OP
       2022-06-13 16:54:55 +08:00
    @hush3 条件多了感觉会套中套
    hush3
        5
    hush3  
       2022-06-13 17:32:26 +08:00
    @knightdf 对 我工作项目里的搜索就都是这种查询 套就完事了
    qq1340691923
        6
    qq1340691923  
       2022-06-13 17:54:43 +08:00
    推荐一个 es 管理工具 https://github.com/1340691923/ElasticView ,它可以可视化组装条件或者写 sql 生成 es 的 dsl
    qq1340691923
        7
    qq1340691923  
       2022-06-13 17:54:57 +08:00
    BJL
        8
    BJL  
       2022-06-13 18:19:38 +08:00
    不知道为什么,是我看的少的缘故嘛,感觉很少见到用 query_string 写的
    knightdf
        9
    knightdf  
    OP
       2022-06-13 18:21:10 +08:00
    @qq1340691923 谢谢,我看看
    BJL
        10
    BJL  
       2022-06-13 18:23:46 +08:00
    revenue:[1 TO 10] AND (headcount:([501 TO 1000] OR [1001 TO 5000]))
    BJL
        11
    BJL  
       2022-06-13 18:26:14 +08:00
    revenue:[1 TO 10] AND headcount:([501 TO 1000] OR [1001 TO 5000])
    headcount 其实不用括起来
    knightdf
        12
    knightdf  
    OP
       2022-06-13 18:27:15 +08:00
    @BJL 面对复杂的查询不方便构建 DSL 而且没法区别 term 和 match 吧,我猜的
    misaka19000
        13
    misaka19000  
       2022-06-13 18:28:08 +08:00
    should 套 must 不就行了
    hush3
        14
    hush3  
       2022-06-13 18:46:33 +08:00
    @qq1340691923 感谢 这就装一个去
    knightdf
        15
    knightdf  
    OP
       2022-06-13 21:06:50 +08:00
    @misaka19000 套中套是可以,就是条件多了有点麻烦
    Red998
        16
    Red998  
       2022-06-13 21:28:43 +08:00
    套娃就行了 、
    strawberryBug
        18
    strawberryBug  
       2022-06-14 08:39:16 +08:00 via Android
    should 可以设置最小匹配条件的个数,minimum_should_match
    knightdf
        19
    knightdf  
    OP
       2022-06-14 08:42:15 +08:00
    谢谢各位,bool 套娃应该是可以满足的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4824 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 04:00 · PVG 12:00 · LAX 20:00 · JFK 23:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.