需要有关Sphinx查询和索引配置的建议

时间:2010-06-25 08:35:32

标签: sphinx

下面是我需要在Sphinx中编制索引的表 alt text

新闻有许多项目通过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作为文本肯定是有很大帮助,因为它可以搜索...

请..我需要你的意见..非常感谢!

2 个答案:

答案 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条件复制到所有已连接的字段(与范围查询相同),这可能会有些麻烦。