我正在开发一个标准的电子商务应用程序,该应用程序包含多个类别的产品。
类别是树,并以数据库中的嵌套集形式存储。
类别可以包含子类别等。
我想使用Elasticsearch进行搜索功能,但我找不到任何用例(或样本)用于此类标准(几乎所有网上商店都有该功能)的分面搜索,我将在下面尝试解释:
----------------------------------------------
|id | name | lft | rgt |
----------------------------------------------
|1 | Electronics | 1 | 18 |
|2 | Accesories | 2 | 9 |
|3 | Cards | 3 | 4 |
|4 | Stations | 5 | 6 |
|5 | Cables | 7 | 8 |
|6 | Computers | 10 | 15 |
|7 | Laptops | 11 | 12 |
|8 | Software | 13 | 14 |
|9 | Phones | 16 | 17 |
|10 | House | 19 | 20 |
Electronics
Accesories
Cards
Stations
Cables
Computers
Laptops
Software
Phones
House
---------------------------
|id | name |
---------------------------
|1 | Lenovo G580 |
|2 | Iphone 5 |
|3 | Keyboard |
|4 | Mouse |
|5 | Sony Xperia Z5 |
---------------------------
|product_id | category_id |
----------------------------
| 1 | 1 |
| 1 | 6 |
| 1 | 7 |
| 2 | 1 |
| 2 | 9 |
| 3 | 1 |
| 3 | 2 |
| 4 | 1 |
| 4 | 2 |
| 5 | 1 |
| 5 | 9 |
假设在这种情况下没有选择类别,搜索框输入为空。 我希望显示属于所有根类别的不同产品,并在所有类别中对其进行计数。有些想法:
-----------------------------------------------------------------
| ------------------------------------ |
| | type for searching... | |
| ------------------------------------ |
-----------------------------------------------------------------
| Categories | Products |
-----------------------------------------------------------------
| Electronics (5) | |-------------------------------------------
| | | Lenovo G580 |
| | |-------------------------------------------
| | |-------------------------------------------
| | | Iphone 5 |
| | |-------------------------------------------
| | |-------------------------------------------
| | | Keyboard |
| | |-------------------------------------------
| | |-------------------------------------------
| | | Mouse |
| | |-------------------------------------------
| | |-------------------------------------------
| | | Sony Xperia Z5 |
| | |-------------------------------------------
请注意,左侧没有House类别,因为它没有产品。
假设在这种情况下选择了一个类别,搜索框输入再次为空。
对我来说有一个关键点:如果用户选择类别(在这种情况下为电子设备),我想显示其子类别的一个级别,其中包含属于他们的产品数量以及父类别的链接。有些想法:
-----------------------------------------------------------------
| ------------------------------------ |
| | type for searching... | |
| ------------------------------------ |
-----------------------------------------------------------------
| Categories | Products |
-----------------------------------------------------------------
| ^-- | |-------------------------------------------
| Accesories (2) | | Lenovo G580 |
| Computers (1) | |-------------------------------------------
| Phones (2) | |-------------------------------------------
| | | Iphone 5 |
| | |-------------------------------------------
| | |-------------------------------------------
| | | Keyboard |
| | |-------------------------------------------
| | |-------------------------------------------
| | | Mouse |
| | |-------------------------------------------
| | |-------------------------------------------
| | | Sony Xperia Z5 |
| | |-------------------------------------------
如果用户选择最后一个类别级别(如下面的电话),我想只显示该级别,仅显示该产品
-----------------------------------------------------------------
| ------------------------------------ |
| | type for searching... | |
| ------------------------------------ |
-----------------------------------------------------------------
| Categories | Products |
-----------------------------------------------------------------
| ^-- | |-------------------------------------------
| Phones (2) | | Iphone 5 |
| | |-------------------------------------------
| | |-------------------------------------------
| | | Sony Xperia Z5 |
| | |-------------------------------------------
如果用户在搜索框中键入了一些想法(但没有选择任何类别),我想显示所有匹配搜索条件的产品以及与该产品匹配的所有独特类别(无论在哪个级别)。
很抱歉这个很长的问题,但我希望它能解释我的意思。
如何使用Elasticsearch实现这种标准方式?
SearchKit http://demo.searchkit.co/以http://docs.searchkit.co/stable/docs/components/navigation/hierarchical-menu.html的方式工作,但我无法弄清楚如何实现映射和查询以实现此类情况......