Как бы вы воспроизвели систему тегов, подобную той, что использует StackOverflow?

Я пытаюсь создать систему тегов для модели кадрового агентства, и мне нравится, как SO разделяет теги и ищет оставшиеся фразы.

Как бы вы сравнили теги в таблице с поисковым запросом и т.д...

Я придумал следующее, но у него есть некоторые заминки...

  1. Пользователь вводит поисковый запрос
  2. Полнотекстовый SQL содержит() поиск по tbl_tags
  3. Возвращает 5 результатов
  4. Проверьте, существует ли каждая «точная фраза тега» в исходной строке запроса.
  5. Если он существует, добавьте идентификатор тега в массив.
  6. Удалить имена тегов из исходной строки поиска...
  7. Ищите в tbl_people людей со связанными идентификаторами TagID и ищите текстовые поля с оставшимся текстом.

Пример поиска: французские менеджеры проектов с опытом работы с Oracle.

Теги : [Французский] [Менеджер проектов] с опытом [Oracle]

Оставшийся текст: с опытом

Теперь проблема возникает, когда я ищу менеджеров проектов, у меня остается лишнее «s» ... и, вероятно, есть и другие ошибки с этой логикой, которые я не могу объяснить ...

Любые идеи о том, как сделать логику идеальной?

Заранее спасибо, я понимаю, что это может быть немного абстрактный вопрос...


person Chris Dowdeswell    schedule 05.05.2011    source источник
comment
Этот вопрос, вероятно, более уместен в мета.   -  person Péter Török    schedule 05.05.2011
comment
Хм, хорошо, как мне его переместить?   -  person Chris Dowdeswell    schedule 05.05.2011
comment
Отметьте на модерации, выберите другое и введите запрос на его перемещение.   -  person Joachim Sauer    schedule 05.05.2011
comment
@Péter Török - я не согласен, речь идет о том, как создать систему тегов, подобную той, что на SO, а не просто запрашивать информацию о том, как она работает, чтобы ее использовать.   -  person tvanfosson    schedule 05.05.2011
comment
Я думаю, что это уместно здесь, поскольку автор хочет знать техническую сторону того, как кодировать систему.   -  person Gary Green    schedule 05.05.2011
comment
Я отметил это сейчас :\ слишком поздно... Меня могут передвинуть в любом случае...   -  person Chris Dowdeswell    schedule 05.05.2011


Ответы (1)


Вам не хватает ключевого компонента того, как StackOverflow выполняет поиск. SO требует, чтобы пользователь разграничивал теги в строке поиска, явно заключая теги в скобки. Логика (вероятно, упрощенная) была бы такой.

  1. Извлеките отмеченные теги, используя регулярное выражение, чтобы обнаружить содержимое внутри скобок
  2. Используя список наиболее распространенных тегов, отсканируйте строку на наличие немаркированных тегов и извлеките их.
  3. Удалить метасимволы тега
  4. Выполнить полнотекстовый поиск, отфильтрованный по тегам
person tvanfosson    schedule 05.05.2011
comment
@Chris - интересно, этого нет в инструкциях. Небольшие эксперименты с тегами на последней странице тегов показывают, что это работает не для всех тегов. Я подозреваю, что есть наиболее часто используемый или наиболее часто используемый список поиска, который используется для сканирования тегов в строке поиска после шага 1. Я обновлю. - person tvanfosson; 05.05.2011
comment
Спасибо, мне интересно, как он знает разницу, например, между веб-разработками как фразой и веб-разработкой как тегом. - person Chris Dowdeswell; 05.05.2011
comment
@Chris, может быть, умножить регулярное выражение на множественное? Поиск строки для (^|) веб-разработки (ов?) будет соответствовать. Вы бы добавили этот тег в свой набор тегов и извлекли соответствующий текст. За исключением того, что они не очень стараются: поиск веб-разработок на самом деле не соответствует тегу в SO. - person tvanfosson; 05.05.2011
comment
Это может решить проблему, я добавлю дополнительные переменные поиска с версиями во множественном и не во множественном числе... :) Если вы обновите свой ответ выше, и он сработает, я отмечу его :) - person Chris Dowdeswell; 05.05.2011