如何构建与sphinx一起使用的mysql数据库?

时间:2011-07-08 12:25:10

标签: mysql sphinx

我正在尝试创建一个可以通过多个方面(如newegg或amazon)搜索的产品数据库。起初我打算尝试使用mysql完成整个过程,但进一步的研究让我相信这是一个坏主意,所以我正在考虑使用Sphinx。

我的问题是如何为此设置mysql表?我是否只有一个产品表和另一个具有所有方面的表,这些表只有几个大的varchar字段和产品的外键?

3 个答案:

答案 0 :(得分:0)

我不是一个庞大的狮身人面像专家,但我会说你不必把所有数据都放在一张桌子上。狮身人面像可以很好地处理协会。如果您计划在前端使用Rails,那么请查看thinking_sphinx gem。它绝对允许您根据分布在许多表中的数据指定属性。根据我的经验,我不必更改我的数据结构以适应Sphinx。

答案 1 :(得分:0)

我会输入。

你真的不需要实际。 Sphinx中的方面只是ID(至少在0.9.9当前的稳定版本中)。我假设你有一个标准的产品表,你的不同方面存储为其他表的外键。

假设你有这个,你可以选择主产品表并根据文档在sphinx中设置facet。

我真的需要看到你的表格结构进一步评论。听起来你的产品遍布多个表格。在这种情况下,正如您所提到的,我将使用您索引的单个表,其中填充了所有其他的内容。

答案 2 :(得分:0)

Sphinx的优点在于您可以使用MySQL查询将数据导入Sphinx。这使您可以以针对业务逻辑优化的方式构建数据库,而无需担心搜索将如何执行。只要您对sql_query编写的查询具有创造性,就可以按照自己的喜好对数据库进行规范化,并且仍然可以使用单个查询获取要编入索引的所有文本。例如,如果需要将多对一关系中的字符串从索引中获取,则可以使用子查询来执行此操作。

sql_query = SELECT *, (SELECT pa.text FROM products_attr pa WHERE pa.product_id=p.id ) \
               FROM products p;

此外,如果您在搜索属性ID的位置下拉,则使用Sphinx的multi-value attribute。这样,您可以按属性ID以及attrbute的文本进行搜索。

sql_attr_multi  = uint attributes from query; \  
  SELECT product_id AS id, id AS attribute FROM product_attributes ;