下面是我需要在Sphinx中编制索引的表
新闻有许多项目通过news_projects表链接到它......
我的问题是,建议将所有项目名称放在一个文本字段中以便可以搜索它吗?
这是我的疑问:
//query to get the project names and make all project names appear in one field separated by comma.
SELECT
news.id
news.headline,
news.body,
GROUP_CONCAT(DISTINCT projects.project_name) as related_projects
FROM news
LEFT JOIN news_projects on news.id = news_projects.news_id
LEFT JOIN projects on news_projects.project_id = projects.id
GROUP BY news.id
然后输出带有project_name列的行,格式为'name,name2,name3'
我有点犹豫不决的天气使用它或只是使project_id成为一个属性..将project_name作为文本肯定是有很大帮助,因为它可以搜索...
请..我需要你的意见..非常感谢!
答案 0 :(得分:1)
如果项目名称对搜索有用,那么一定要保留它。我建议使用空格而不是逗号连接(尽管在使用默认设置时,Sphinx可能无关紧要)。
将项目ID作为多值属性(MVA)可能也很有用 - 这意味着您可以将搜索结果限制为特定项目中的新闻项。真的没有理由不兼得。
答案 1 :(得分:1)
您还可以使用sql_joined_field指定related_projects字段。它可能更快,因为您可以从主查询中删除分组。
sql_query = SELECT id, headline, body FROM news
sql_joined_field = related_projects from query; \
SELECT news_projects.news_id, projects.project_name \
FROM news_projects \
JOIN projects ON projects.id = news_projects.project_id \
ORDER BY news_projects.news_id ASC
但是,如果您创建delta索引,则必须将delta条件复制到所有已连接的字段(与范围查询相同),这可能会有些麻烦。