2012-06-28 3 views
1

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

  1. Пользователь вводит поисковый запрос - «коричневые кожаные диваны».
  2. Разделить запрос на массив.
  3. База данных поиска (mysql) с использованием LIKE% $ val% для каждой строки массива.
  4. Загрузите результаты в массив, а затем дайте каждому результату +1 точку для количества поисковых терминов, найденных в контенте.
  5. Если результаты имеют соответствующее количество условий, то укажите количество просмотров определенной страницы - показатель популярности.

Не слишком сложно реализовать такие вещи, как предоставление большей ценности результатам с условиями поиска в заголовке страницы или предоставление пользователям возможности поиска многословных фраз посредством использования котировок.

Помимо соображений производительности - ограничение возвращаемых результатов, кэширование и т. Д., Есть ли что-нибудь еще, что мне нужно рассмотреть или лучший способ приблизиться к этому (помимо внедрения окна поиска Google)?

+0

Вы изучали поисковые серверы, такие как [Sphinx] (http://sphinxsearch.com/)? – ESG

ответ

1

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

Рассмотрите: два фрагмента контента, которые будут возвращены в виде отдельных результатов.

Результат 1:

____ brown ____ ____ _____ ____ brown ____ ____ ______ ___ brown _____ ____ brown 

Результат 2:

brown leather sofas _____ _____ ______ ____ _____. 

Очевидно, что мы хотели бы вернуть результат 2 в качестве верхнего результата, однако ваш метод будет назначить больше "точек", чтобы привести 1.

+0

Хорошее наблюдение, спасибо. Не забудьте дать больше веса экземплярам, ​​которые точно соответствуют фразе, а затем тем, у кого есть близкие условия и т. Д. Честно говоря, это, вероятно, будет довольно интересным упражнением. :) – Anonymous

0

Считаете ли вы Full Text Searching? Это не подходит в каждом случае, но может помочь с такой проблемой.

SELECT * 
FROM articles 
WHERE MATCH (title, body) 
AGAINST ('database' IN NATURAL LANGUAGE MODE); 

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

Если вы создаете таблицу и вставить только один или два ряда текста в он, каждое слово в тексте происходит не менее чем на 50% строк. В результате ни один поиск не возвращает никаких результатов. Обязательно вставьте как минимум три ряда, и желательно еще много.

Смежные вопросы