请教个 Elasticsearch 的多标签筛选问题

2020-12-11 03:33:42 +08:00
 axwz88
我举个简单的栗子就知道我想问什么了。

比如有多个学校,
华东师范大学
同济大学
N 多个学校......

每个学校有 N 个标签
华东师范大学:学霸多,女生多,校园美,交通便利....N 多个标签...
同济大学:学霸多,男生多,美食多,运动场大....N 多个标签...

以上都是我自己编的,

然后我的问题是,我可以用 ES 实现根据标签去筛选学校吗,用户可以选择一个或多个标签,然后筛选符合条件的学校,如果是用 MYSQL 上面的需求很容易就能实现,用 ES 怎么实现更好,请教一下,谢谢大家。
3487 次点击
所在节点    Elasticsearch
14 条回复
stiekel
2020-12-11 07:08:26 +08:00
也一样实现,es 可以存数组。然后使用 term 。
trevis761923
2020-12-11 08:08:57 +08:00
设定个字段名 label 值存[ "value1", "value2"...] 然后再搜呗 会自动分词的
undefine2020
2020-12-11 09:06:00 +08:00
啊,es 知道,请教 mysql 是怎么实现多表现搜索的?
wakzz
2020-12-11 09:20:28 +08:00
这个用 es 的 terms 很好实现, 反而是 mysql 并不好实现,而且这种应用场景下 mysql 数据量大了以后不好优化
kiddingU
2020-12-11 09:31:28 +08:00
terms 就可以了
JRay
2020-12-11 09:47:03 +08:00
terms 就可以了
ben1024
2020-12-11 12:39:04 +08:00
should 嵌套
lithium4010
2020-12-11 17:46:42 +08:00
terms filter
axwz88
2020-12-11 20:48:31 +08:00
@stiekel
@wakzz
@kiddingU
@JRay
@lithium4010
谢谢,用 terms 可以实现查询,然后我主要想问下储存的方式,现在知道有两个储存的方式,一种是标签字段类型是 keyword,然后按数组存储的,另一种是全部标签存储在一个字符串中,标签之间用逗号分隔。两种都可以精确查询,不知道实际开发用哪种方式比较多。
loveyu
2020-12-11 21:26:39 +08:00
MySQL 实现估计是连表吧,还不如 ES
stiekel
2020-12-12 06:59:40 +08:00
@axwz88 前者。
JRay
2020-12-12 11:35:57 +08:00
@axwz88 直接数组存就可以了
kiddingU
2020-12-12 21:20:36 +08:00
@axwz88 数组就行,我目前有一个 index 和你的需求类似,也是存储用户标签数据,直接数据就行
lithium4010
2020-12-16 11:51:32 +08:00
keyword

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

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

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

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

© 2021 V2EX