Динамический поиск, выдача ссылок на результаты поиска (обратная маршрутизация) - PullRequest
0 голосов
/ 12 мая 2011

Просто сводить мои cms и пытаться упростить некоторые обычные задачи, такие как поиск. CMS имеет много разных модулей, каждый из которых может быть замаскирован динамическими маршрутами.

Вся система довольно прочная и действительно гибкая, но именно здесь страницы результатов поиска вызывают головную боль.

Чтобы сохранить гибкость, я добавляю базовые данные в свой класс поиска, например:

$search->addTable('content', array('title', 'excerpt', 'body', 'meta_keywords', 'meta_description'));
$search->addTable('event', array('title', 'description', 'tags'));

Затем, мой класс поиска генерирует один sql-запрос из этих переменных, который найдет результаты красиво (э-э, может быть, "красиво" сейчас не лучшее слово, потому что набор результатов содержит строки из разных таблиц, поэтому я не могу сказать, какая строка принадлежит какой таблице, потому что все результаты находятся в одном массиве)

Проблема в том, что когда я хочу отобразить страницу результатов, мне нужно позаботиться о создании соответствующих URL для каждого результата, что очень сложно из-за гибкости системы, о которой я упоминал выше (любой контент / модуль может быть замаскирован чем угодно).

Я понимаю, что мой вопрос очень локализован и, возможно, слишком неопределен, чтобы ответить на него в его нынешнем виде, поэтому я попытаюсь немного прояснить свои проблемы. Я не спрашиваю вас о передовых методах или простом ответе на мою проблему, но я был бы очень благодарен, если бы вы могли дать мне несколько хороших советов по этим фундаментальным вопросам:

  • Похоже, создание одного запроса - не лучший подход, потому что я не могу сказать, какая строка принадлежит какой таблице (разные таблицы могут означать разные методы создания URL). Другой подход заключается в том, чтобы запрашивать каждую таблицу отдельно и сохранять результаты в многомерном массиве (имя таблицы для ключа). AFAIK запрос sql в цикле foreach не является приемлемым методом. Можно ли пометить каждую строку результата, чтобы она отображала имя таблицы в одном запросе?
  • Повредит ли моему SEO, если я не создам реальные (замаскированные, маршрутизированные) URL-адреса для этих результатов, но я показываю очень простые, например (example.com/content/nice-url-slug). Google может наказать мои сайты из-за дубликатов - что мне не подходит.

Как всегда, пожалуйста, спросите, вместо того, чтобы нажимать кнопку закрытия, может быть, я смогу прояснить сценарий немного больше. Спасибо, Фабрик.

1 Ответ

1 голос
/ 12 мая 2011

Короткий ответ: совершенно нормально делать несколько запросов, если мы не говорим о десятках из них.Это также означает, что возвращаемые результаты будут представлять собой набор наборов, структурированный как ваш массив выше, с именем таблицы, являющимся ключом к набору результатов из этой таблицы.

Я должен понять, что естьточка где-то в коде, где собран этот массив.Когда он собран, вы можете просмотреть его и запросить каждую таблицу ровно один раз.В этом цикле у вас есть весь необходимый контекст: имя таблицы.

Затем вы возвращаете этот массив массивов любому клиенту, который собирает его в результаты.Если имя таблицы достаточно для построения URL, вы можете пойти.Если вам нужна дополнительная информация о каждой таблице, например, как назван ее столбец идентификатора, структурируйте массив результатов так, чтобы он содержал необходимые метаданные о каждой таблице.

В целом, похоже, что вы хорошо структурированыи получают путаницу, пытаясь избежать нескольких запросов.Не беспокойся об этом.Проблема с несколькими запросами заключается в том, что одна и та же * таблица * запрашивается снова и снова в цикле, когда это является широко распространенным шаблоном проектирования, тогда показатели производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...