Для предложения запроса хорошим способом является подсчет количества вхождений каждого поискового запроса (вероятно, лучше не учитывать повторные запросы одного и того же пользователя).У вас будет файл / таблица / что-то (запрос, количество), например:
"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
Два примечания:
- Есть лучшие (и более сложные) способы сделать это.Например, у Amazon есть довольно приятное предложение для запроса.
Предоставленное решение будет предлагать только те запросы, которые начинаются с запроса пользователя.Как:
"lady" => ["lady gaga", "lady xyz"]
Запрос "lady" не будет совпадать с "gaga lady".Чтобы они соответствовали, вам потребуется индексирование запросов с помощью поддержки полнотекстового поиска вашей базы данных или внешней библиотеки, такой как Lucene .
.