gpt4 book ai didi

php - Mysql(全文?)搜索产品

转载 作者:行者123 更新时间:2023-11-30 01:13:01 27 4
gpt4 key购买 nike

我正在构建一个非常简单的产品目录,它将在 mysql 表中存储产品,我想尽快搜索产品(并尽可能相关)。产品数据库将非常大(大约 500.000 个产品),这就是为什么使用“like”而不使用索引的搜索非常慢的原因。

我有很多字段,但我想要搜索的唯一字段是:

  • product_id = bigint
  • 标题 = varchar(255)
  • 描述=文字

我尝试尝试全文搜索,但出现了一些问题:

  • 我无法通过product_id进行搜索,因为它是一个大整数,并且无法在全文索引中建立索引(有时用户知道产品的ID)
  • 如果我搜索“Meter XY-123”,即使单个产品的标题和说明包含两个单词(“meter”和“xy-123”),我也不会得到任何搜索结果
  • 我无法搜索子字符串 - 例如如果产品的标题是“Foobar 123”,即使用户搜索:
    • foo 酒吧 123
    • 栏 123
    • foobar 12
    • 等等
  • 结果还应该按某种相关性排序返回。如果我有两个产品“foobar 123”和“foobar 456”并且用户搜索“foobar 4”,那么这两个产品都应该返回(匹配任何单词),但第二个产品的排名应该比第一个产品更高(因为它也包含数字4)第一个(不包含数字 4)。
  • 产品还应该根据值所在的字段进行排名。在这种情况下,product_id 字段的权重比标题更大,标题的权重也比描述更高。例如。如果用户搜索“1234”则:
    • 排名第一的产品应该是 Product_id 1234 的产品
    • 之后应该会出现标题中包含“1234”的排名产品
    • 随后的产品在说明中包含此编号

像这样在此表上进行搜索的最佳方法是什么?在我的例子中,给出良好结果的唯一方法是拆分查询字符串,并为每个字符串使用“like”运算符查询多个查询,并以某种方式计算权重,但此解决方案运行速度非常慢(单个查询甚至超过 15 秒)这太慢了)。

我并不期望仅使用单个查询就可以实现一切,但我正在寻找一种快速且尽可能相关的解决方案。如果这意味着构建某种自定义单词索引或类似的内容,我也愿意这样做,我只需要知道如何管理它?

谢谢!

最佳答案

我们将搜索迁移到了 Sphinx。现在我们需要微调结果。

关于php - Mysql(全文?)搜索产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19312882/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com