我对"全文搜索引擎"的理解是,它本质上也是一个数据库。
例如:Elasticsearch 和 MySQL ,虽然二者在
- 存储数据的方式(关系型数据库 vs 文档型数据库)
- 索引方式( B+树 vs 倒排索引)
上有所不同,但它们的主要功能都是存储 & 查询数据。
如果将 Elasticsearch 看作数据库,那么 Elasticsearch & MySQL 就是两个数据库。
我的疑惑是,在 Elasticsearch & MySQL 这两者搭配使用时
- 数据是怎样存储的?
按照是否需要模糊搜索,可以将数据库表中的字段分为两类(参与模糊搜索的字段 / 不需要模糊搜索的字段)。那么,Elasticsearch 中是只存储 "参与模糊搜索的字段" 吗? - 数据是怎样查询的?
什么场景下只查询 Elasticsearch?有没有需要同时在 Elasticsearch & MySQL 中查询的场景?
例如,实现一个搜索商品的 "高级搜索" 功能,要求除了按照 "商品的名称" 这一字段模糊搜索外,同时还需要:
- 按照 "商品的卖家"(卖家-商品,一对多)筛选商品
- 按照 "商品的标签"(标签-商品,多对多)筛选商品
- 按照 "商品的销量" 排序
在这个例子里面,只有"商品的名称" 这一字段需要模糊搜索;"商品的卖家" & "商品的标签" 都是商品的 "关系",是按照 "关系" 查找;"商品的销量" 只用来排序。
请问各位老哥,在这种场景下,数据该怎样在 Elasticsearch & MySQL 这两者间存储 & 查询?