0
我正在构建一个非常简单的产品目录,该产品目录将存储产品在mysql表中,并且我想尽可能快地(并且尽可能相关)搜索产品。产品数据库将会非常大(大约500,000个产品),这就是为什么使用“不喜欢”索引的“like”进行搜索非常缓慢。Mysql(全文?)搜索产品
我有许多字段,但只有那些我想搜索有:
- 的product_id = BIGINT
- 标题= VARCHAR(255)
- 描述=文本
我试着尝试全文搜索,但有一些问题:
- 我无法通过product_id进行搜索,因为它是大整数,无法在全文索引内进行索引(有时用户知道产品的ID)
- 如果我搜索“Meter XY-123”,则不会收到搜索结果即使单个产品的标题和描述都包含单词(“米”和“xy-123”)
- 我无法搜索子字符串 - 例如如果产品的标题是 “Foobar的123” 它应该返回即使用户搜索:
- 富杆123
- 杆123
- foobar的12
- 富
- 等
- 结果也应该按某种相关性排序返回如果我有两个产品“foobar 123”和“foobar 456”,并且用户搜索“foobar 4”,那么两个产品应该返回(匹配任何单词),但第二个产品应该排名较高(因为它也包含数字4)第一个(不包含第4个)。
- 产品也应该根据哪个字段的值被发现。在这种情况下,product_id字段的权重大于标题的权重,它的权重也高于说明的权重。例如。如果“1234”,那么用户搜索:
- 排名第一的产品应该是已经PRODUCT_ID 1234
- 之后应该是有排名的产品,包括“1234”的称号内
- 事后产品,其中包括该号码的单里面描述
什么是做在这个表上这样搜索的最佳方式?在我的情况下,给出好结果的唯一方法是分割查询字符串,并使用“like”运算符为每个字符串查询多个查询,并以某种方式计算权重,但此解决方案的工作速度很慢(对于单个查询甚至超过15秒这太慢了)。
我不希望所有事情都可能只使用单个查询,但我正在寻找一种快速且尽可能相关的解决方案。如果这意味着建立某种定制词索引或类似的我也愿意这样做,我只需要一个想法如何管理呢?
谢谢!
不确定,但您可以尝试使用查询扩展的全文搜索 –
我正在使用Sphinx搜索引擎。它适用于全文搜索。请参阅:http://sphinxsearch.com/docs/2.1.2/ – Adam
不幸的是狮身人面像不是一个选项。我只查找mysql(&php)选项。 – j99