Sphinx相关的表字符串属性

时间:2012-10-27 17:16:02

标签: sql sphinx

以下是一个示例,说明我尝试做的事情:

假设我在食谱和食谱之间有一对多的关系,其中包含字段' id'和' name'在两个表中。目前,搜索仅返回"名称"食谱的字段,所以结果可能如下所示 -

RECIPES

  • 结果名称1
  • 结果名称2
  • 结果名称3
  • ...

我想看到的是,如果不使用外键的sql_attr_uint进行额外的数据库调用或搜索查询,请执行以下操作:

RECIPES

  • 结果名称1 ----------此结果的cookbook名称
  • 结果名称2 ----------此结果的cookbook名称
  • 结果名称3 ----------此结果的cookbook名称
  • ...

我知道sql_attr_string,但这只在向每个文档添加一个任意字符串时才有用。我需要类似sql_joined_field的东西,它不是全文搜索,而是简单地存储在具有查询中适当值的文档中。

任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

我相信我偶然发现了解决方案,对Sphinx文档感到有些困惑:

  

既不是文档ID(第一个)也不是属性的所有列都将被全文索引。

我认为无论如何,我放在sql_query中的字段都是全文索引的。实际上,将字段指定为“属性”会更改此行为,实际上会删除字段的全文索引,而只是将其放在文档中。

为了解决我的问题,我只是在主sql_query中编写了我的JOIN(因为sql_joined_field似乎不允许将其指定为属性)并将字段设置为sql_attr_string。

答案 1 :(得分:0)

处理一对多字符串属性的选项是使用一些MySQL技巧将文本列拉入sql_query。例如;

  

SELECT DISTINCT *,GROUP_CONCAT(tm.text_field SEPARATOR'')FROM table t INNER JOIN table_many tm ON t.id = tm.t_id;

它也可以作为一个额外的子查询工作,如果你有一组更复杂的连接,这可能会更方便。

  

SELECT *,   (SELECT GROUP_CONCAT(text_field SEPARATOR'')FROM table_many tm WHERE t.id = tm.t_id)   从表t