Нужен совет по настройке запросов и индексов Sphinx - PullRequest
0 голосов
/ 25 июня 2010

ниже приведены таблицы, которые мне нужно индексировать в 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 атрибутом. Наличие имя_проекта в качестве текста определенно очень помогает, потому что его можно искать в ...

Пожалуйста.. Мне нужно ваше мнение об этом .. большое спасибо!

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Вы также можете указать поле related_projects с помощью sql_joined_field .Это может быть быстрее, потому что вы можете удалить группировку из основного запроса.

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

Однако, если вы создаете дельта-индексы, вам придется копировать дельта-условия во все соединенные поля (то же самое, что и для запросов с ранжированием)что может быть чем-то вроде боли.

1 голос
/ 06 июля 2010

Если название проекта полезно для поиска, то обязательно сохраните его.Я бы порекомендовал объединить с пробелом вместо запятой, хотя (хотя это может не иметь значения для Sphinx, когда вы используете настройки по умолчанию).

Вероятно, также полезно иметь идентификаторы проекта какмногозначный атрибут (MVA) - это означает, что вы можете ограничить результаты поиска новостями в конкретном проекте.На самом деле нет причин не иметь и того, и другого.

...