Результат поиска MySQL — Сортировка по относительности

#php #mysql #codeigniter

#php #mysql #codeigniter

Вопрос:

Я пытаюсь закодировать функции релевантности базовой поисковой системы, которая выполняет поиск в базе данных веб-сайта. Давайте возьмем пример Yelp. (Прямая ссылка на страницу http://www.yelp.com/search?find_desc=chineseamp;ns=1amp;find_loc=New York, NY )

Вопрос 1

Как они определяют «Наилучшее соответствие»? Я предполагаю, что они ищут все записи, содержащие ключевое слово хотя бы один раз, затем сортируют по количеству раз, когда ключевое слово появляется в заголовке / теге / описании.

Вопрос 2

Для сортировки по «Наивысшему рейтингу» и «Наиболее просматриваемым» они ищут все записи, содержащие ключевое слово, затем сортируют по средним рейтингам и количеству отзывов соответственно.

Вопрос 3

Я использую CodeIgniter с MySQL и активными записями. Допустим, в моей таблице «продукты» есть столбцы «идентификатор, название, категории, теги, описание».

  • Как мне выполнить запрос, который возвращает все строки с ключевым словом, появляющимся в одном из этих столбцов, и
  • как мне подсчитать, подсчитайте, сколько раз ключевое слово появляется в одном из этих столбцов в запросе MySQL.

Комментарии:

1. devzone.zend.com/article/1304

Ответ №1:

Сортировка по релевантности, особенно когда речь идет о ключевых словах / текстах, — непростая задача. Когда вы имеете дело с действительно большими наборами данных, такими как Yelp, вам нужны специализированные полнотекстовые поисковые системы, такие как Sphinx http://sphinxsearch.com /

Sphinx и подобные поисковые системы позволят вам сортировать (среди прочего) ваши записи на основе количества совпадений ключевых слов в полной записи

Если ваш набор записей невелик, то я думаю, вам может сойти с рук выполнение довольно простого поиска по релевантности с помощью сложного предложения order by, которое использует LIKE

Комментарии:

1. спасибо, я думаю, я загляну в sphinx и тому подобное, когда сайт вырастет (надеюсь!). Если бы я использовал LIKE, как я могу определить количество вхождений определенного ключевого слова в 3 столбцах?

2. Я не думаю, что вы можете найти количество вхождений, но больше похоже на то, существует оно или нет, взгляните на это, это должно дать вам приблизительное представление о том, как это работает sitepoint.com/forums/mysql-182 /…