0

这是一个示例来说明我正在尝试做的事情:

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

食谱

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

在不使用外键的 sql_attr_uint 进行额外的数据库调用或搜索查询的情况下,我希望看到的是以下内容:

食谱

  • 结果名称 1 ---------- 此结果的说明书名称
  • 结果名称 2 ---------- 此结果的说明书名称
  • 结果名称 3 ---------- 此结果的说明书名称
  • ...

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

任何建议表示赞赏。

4

2 回答 2

1

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

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

我认为这意味着无论如何,我放置在 sql_query 中的字段都将被全文索引。事实上,将字段指定为“属性”会改变这种行为,实际上是删除了字段的全文索引,而只是将其放在文档中。

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

于 2012-10-29T00:31:12.803 回答
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) FROM table t

于 2012-10-29T00:56:55.903 回答