Рейтинг поисковых ключевых слов - PullRequest
2 голосов
/ 13 сентября 2011

Вопрос: как ранжировать ключевые слова, которые использовались в поисковых запросах в моем веб-приложении, по времени и количеству запросов?

Пользователь вводит свой поисковый запрос в текстовое поле. Через AJAX мне нужно вернуть некоторые предложения пользователю. Эти предложения основаны на количестве поисковых запросов , выполненных по этому ключевому слову, и должны быть отсортированы по последним поисковым запросам

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

Как мне спроектировать базу данных для хранения поисковых запросов? Как написать SQL-запрос, чтобы получить предложения?

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

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

"britney spears" 12
"kelly clarkson" 5
"billy joel" 27
"query abcdef" 2
"lady gaga" 39
...

Затем вы можете отсортировать по убыванию:

"lady gaga" 39
"billy joel" 27    
"britney spears" 12
"lady xyz" 5
"query abcdef" 2
...

Затем, когда кто-тонапример, при поиске "lady" выполните поиск префикса по всем строкам, начиная с верха файла / таблицы / чего-либо и заканчивая снизу.Если вам нужны только K предложения, вы будете идти только до тех пор, пока не найдете Top-K предложения.

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

SELECT q.query from (SELECT * from search_queries order by query_count DESC) as q where q.query LIKE "prefix%" LIMIT 0,K

Два примечания:

  1. Есть лучшие (и более сложные) способы сделать это.Например, у Amazon есть довольно приятное предложение для запроса.
  2. Предоставленное решение будет предлагать только те запросы, которые начинаются с запроса пользователя.Как:

    "lady" => ["lady gaga", "lady xyz"]

Запрос "lady" не будет совпадать с "gaga lady".Чтобы они соответствовали, вам потребуется индексирование запросов с помощью поддержки полнотекстового поиска вашей базы данных или внешней библиотеки, такой как Lucene .

.
1 голос
/ 13 сентября 2011

В идеале вы должны отсортировать что-то вроде следующего:

order by sum(# of searches / (how long ago that search was performed + 1))

Это должно быть изменено так, чтобы, сколько лет назад было основано на соответствующем базовом времени.Например, если вы хотите, чтобы результаты поиска считались половиной после недели, вы должны сделать неделя = 1.

Это будет явно неэффективно, поскольку вычисление того, как давно выполнялся каждый поиск для всех результатов поиска, будетбыть трудоемким.Таким образом, вы можете захотеть сохранить промежуточную сумму для каждого поиска и умножить итоговые значения на определенное значение каждый период времени.Например, если вы хотите, чтобы результаты поиска считались половиной через неделю, вы должны добавить один к этому столбцу для каждого поиска.Тогда у вас будет процесс, который умножает столбец поиска на .5 каждую неделю.Тогда вы просто сортируете по этому столбцу.

0 голосов
/ 13 сентября 2011

Вам нужно что-то вроде самовнушения?Существует плагин JQuery autocomplete, который ищет похожие слова только тогда, когда пользователь вводит буквы.Однако, если вы хотите получить предложения, основанные на количестве поисков ключевого слова пользователем, вам нужно сохранить ключевые слова в отдельной таблице, а затем извлечь их для другого пользователя?

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