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

2022-06-13 11:30:43 +08:00
 knightdf

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

2861 次点击
所在节点    Elasticsearch
19 条回复
hush3
2022-06-13 14:16:54 +08:00
should + terms ?
knightdf
2022-06-13 15:28:36 +08:00
@hush3 比如以 Linkedin 为例,revenue 1-10, headcount 501-1000 或者 1001-5000 ,should 会全部当成 OR 来链接吧?但是 revenue 和 headcount 其实是 AND 链接
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
2022-06-13 16:54:55 +08:00
@hush3 条件多了感觉会套中套
hush3
2022-06-13 17:32:26 +08:00
@knightdf 对 我工作项目里的搜索就都是这种查询 套就完事了
qq1340691923
2022-06-13 17:54:43 +08:00
推荐一个 es 管理工具 https://github.com/1340691923/ElasticView ,它可以可视化组装条件或者写 sql 生成 es 的 dsl
qq1340691923
2022-06-13 17:54:57 +08:00
BJL
2022-06-13 18:19:38 +08:00
不知道为什么,是我看的少的缘故嘛,感觉很少见到用 query_string 写的
knightdf
2022-06-13 18:21:10 +08:00
@qq1340691923 谢谢,我看看
BJL
2022-06-13 18:23:46 +08:00
revenue:[1 TO 10] AND (headcount:([501 TO 1000] OR [1001 TO 5000]))
BJL
2022-06-13 18:26:14 +08:00
revenue:[1 TO 10] AND headcount:([501 TO 1000] OR [1001 TO 5000])
headcount 其实不用括起来
knightdf
2022-06-13 18:27:15 +08:00
@BJL 面对复杂的查询不方便构建 DSL 而且没法区别 term 和 match 吧,我猜的
misaka19000
2022-06-13 18:28:08 +08:00
should 套 must 不就行了
hush3
2022-06-13 18:46:33 +08:00
@qq1340691923 感谢 这就装一个去
knightdf
2022-06-13 21:06:50 +08:00
@misaka19000 套中套是可以,就是条件多了有点麻烦
Red998
2022-06-13 21:28:43 +08:00
套娃就行了 、
ponymaggie
2022-06-13 22:57:55 +08:00
strawberryBug
2022-06-14 08:39:16 +08:00
should 可以设置最小匹配条件的个数,minimum_should_match
knightdf
2022-06-14 08:42:15 +08:00
谢谢各位,bool 套娃应该是可以满足的

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

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

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

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

© 2021 V2EX