【问题标题】:How to make my product search more efficient?如何让我的产品搜索更有效率?
【发布时间】:2019-02-26 11:37:24
【问题描述】:

我正在使用 MySQL 作为电子商务项目的后端。在第一个屏幕中,我在用户搜索某些内容时显示结果,通过这些结果,用户可以选择任何一个结果并根据选择,用户获取与所选相关的所有产品结果。

示例: 屏幕 1(从搜索栏):用户搜索“tropicana”,结果集将是:
第 1 名:tropicana 混合果汁(类别)
第 2 名:tropicana 苹果汁中的果汁(类别)
第 3 名:果​​汁中的 tropicana 橙汁(类别)
第四名:tropicana 菠萝汁(类)
第 5 名:果汁(类别)中的 tropicana 番石榴汁和所有其他 tropicana 相关产品,不分任何类别

屏幕 2(选择“tropicana pineapple 果汁”后):用户根据所选产品名称及其类别获取结果集(我在此屏幕中使用了分页):

第一个:tropicana 混合果汁与所有基本细节
第二:tropicana 苹果汁,包含所有基本细节
第三:具有所有基本细节的tropicana橙汁
第四名:tropicana 菠萝汁,包含所有基本细节
第五名:tropicana番石榴汁,包含所有基本细节

但我想要的是用户应该首先看到所选产品的详细信息,然后是所有其他相关产品:

示例:
第 1 名:具有所有基本细节的 tropicana 菠萝汁
第二:tropicana 苹果汁,包含所有基本细节
第三:具有所有基本细节的tropicana橙汁
第四:tropicana 混合果汁与所有基本细节
第五名:tropicana番石榴汁,包含所有基本细节

我用过这个sql查询:

("select p.id,p.product_name,p.rating,p.rating_count,p.product_mrp from product p
    INNER JOIN product_category_mapping pcm ON p.id = pcm.product_id
    where (p.product_name like concat('",in_product_name,"','%') or p.product_name like concat('%','",in_product_name,"','%')) 
    order by p.",in_order_by," ",in_order_type," limit ", var_offset,",",var_limit);

任何人都可以为此提出任何好的选择吗?

【问题讨论】:

  • 首先要注意安全性,您的代码接缝容易受到 SQL 注入攻击。然后担心性能..
  • @RaymondNijland 我给出了非常基本的查询,仅供参考
  • 相信其他牌子的果汁都可以买到

标签: mysql node.js search full-text-search e-commerce


【解决方案1】:
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,product VARCHAR(255) NOT NULL 
);

INSERT INTO my_table (product) VALUES
('tropicana pineapple juice'),
('tropicana apple juice'),
('tropicana orange juice'),
('tropicana mix fruit juice'),
('tropicana guava juice'),
('jolt pineapple juice'),
('jolt apple juice'),
('jolt orange juice'),
('jolt mix fruit juice'),
('jolt guava juice'),
('duff pineapple juice'),
('duff apple juice'),
('duff orange juice'),
('duff mix fruit juice'),
('duff guava juice'),
('acme pineapple juice'),
('acme apple juice'),
('acme orange juice'),
('acme mix fruit juice'),
('acme guava juice');

ALTER TABLE my_table ADD FULLTEXT(product);

SELECT *
     , MATCH(product) AGAINST('tropicana pineapple') x 
  FROM my_table;
+----+---------------------------+-----------------+
| id | product                   | x               |
+----+---------------------------+-----------------+
|  1 | tropicana pineapple juice | 2.4020363687754 |
|  2 | tropicana apple juice     | 1.0619741682407 |
|  3 | tropicana orange juice    | 1.0619741682407 |
|  4 | tropicana mix fruit juice | 1.0619741682407 |
|  5 | tropicana guava juice     | 1.0619741682407 |
|  6 | jolt pineapple juice      | 1.3400622005347 |
|  7 | jolt apple juice          |               0 |
|  8 | jolt orange juice         |               0 |
|  9 | jolt mix fruit juice      |               0 |
| 10 | jolt guava juice          |               0 |
| 11 | duff pineapple juice      | 1.3400622005347 |
| 12 | duff apple juice          |               0 |
| 13 | duff orange juice         |               0 |
| 14 | duff mix fruit juice      |               0 |
| 15 | duff guava juice          |               0 |
| 16 | acme pineapple juice      | 1.3400622005347 |
| 17 | acme apple juice          |               0 |
| 18 | acme orange juice         |               0 |
| 19 | acme mix fruit juice      |               0 |
| 20 | acme guava juice          |               0 |
+----+---------------------------+-----------------+
20 rows in set (0.00 sec)

【讨论】:

  • 只有当完整的关键字匹配时才会给出结果,但如果我在搜索中只传递'jui',那么它不会像查询一样给我结果
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 2017-06-08
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 2015-01-24
相关资源
最近更新 更多