例如:Elasticsearch 和 MySQL ,虽然二者在
上有所不同,但它们的主要功能都是存储 & 查询数据。
我的疑惑是,在 Elasticsearch & MySQL 这两者搭配使用时
例如,实现一个搜索商品的 "高级搜索" 功能,要求除了按照 "商品的名称" 这一字段模糊搜索外,同时还需要:
在这个例子里面,只有"商品的名称" 这一字段需要模糊搜索;"商品的卖家" & "商品的标签" 都是商品的 "关系",是按照 "关系" 查找;"商品的销量" 只用来排序。
请问各位老哥,在这种场景下,数据该怎样在 Elasticsearch & MySQL 这两者间存储 & 查询?
1
jhdxr 2023-03-25 09:03:57 +08:00
1. 如果我没有记错,ES 不推荐将自己当做首要存储( primary storage ,怎么翻比较好?。。。)。换言之,你最好保证在 ES 里的数据全丢了以后,你依然能够有别的来源重建它。
2. 倒排索引只是针对文本的检索,ES 也可以处理别的,比如数字、地理位置、向量等。(做没做好另说) 3. 你可以将在查询条件中会用到的数据全部导入 ES ,用它完成搜索拿到主键然后回 DB 去拿完整数据 |
2
lower 2023-03-25 15:33:10 +08:00
除了处理比较复杂的检索外,我觉得用于解决 db 分库分表后还想联合查的问题,应该挺有用处……
|
3
tisswb 2023-03-25 16:45:16 +08:00
数据首先需要写入 mysql ,然后通过管道触发进入 es 索引,各有各的强项与优势,以前做舆情项目的时候搞过。
|
4
Saxton 2023-03-25 17:47:17 +08:00
正好我做过这个业务,可以来回答回答
首先你要搞清楚 ES 和传统 DB 的区别,ES 一般只做检索,光没有事务这点就足以了 第二你要知道你想拿 ES 来做什么 我目前的做法是 ES 只做检索,只要系统上涉及到复杂检索的全部走 ES ,数据在写入时,热点数据同步写入 ES ,冷数据异步写入 ES 数据冗余为宽表数据,监听 binlog 来实现对冗余的字段进行更新。 |
5
Saxton 2023-03-25 17:49:59 +08:00
在 ES 中数据都是扁平的,没有关系的,ES 更喜欢扁平化的数据
|