Генерация ранжированных ключевых слов (на основе частоты) из mysql или sphinx

#php #mysql #sphinx #keyword

#php #mysql #sphinx #ключевое слово

Вопрос:

Я только что наткнулся на indexer --buildstopwords dict.txt 100000 .... функцию в sphinx search, которая создает файл стоп-слов, содержащий наиболее часто используемые термины в указанном индексе. Вот пример вывода одного из моих индексов:

 bedroom 974428
sale 888884
for 884699
house 515221
delivery 464002
day 462239
same 406905
5dr 364648
 

Однако вместо того, чтобы делать это для всей базы данных, я бы хотел создавать списки для отдельных категорий. Что-то, что кажется невозможным с индексатором sphinx.

Есть ли какой-либо другой способ, которым я могу сгенерировать список ключевых слов из title поля в mysql и вернуть результаты в виде упорядоченного списка с рейтингом популярности?

Одна из возможных проблем с любым ответом заключается в том, что моя title таблица в mysql не индексируется (поскольку sphinx заботится о моем поиске), и у меня более 10 миллионов записей.

Ответ №1:

Также, как и все, что sphinx делает с функцией buildstops, запускает запрос индексации ‘sql_query’ и разделяет результаты на слова (согласно обычным правилам токенизации) и вычисляет частоты.

Таким образом, не имеет значения, индексируется или нет, вы просто восстанавливаете все строки.

… такую функцию было бы относительно легко воспроизвести самостоятельно. Запустите запрос, чтобы получить все заголовки, разделить на слова и суммировать результаты.


Но, возможно, вы могли бы попытаться сделать его эффективным как sphinx (потому что это скомпилированная программа на C с обычно довольно умными разработчиками ;). Но если вы можете запустить его как ночной пакетный процесс, возможно, не имеет значения, насколько медленной и неуклюжей является ваша версия.


Если важна эффективность, можно создать поддельный индекс sphinx (т. Е. Он никогда не индексируется), который можно было бы использовать,

например, создайте специальную таблицу с одной строкой — category_id. и индекс использует это для фильтрации результатов (таблица — это просто хакерский способ передать «переменную» в индекс sphinx)

 sql_query = SELECT id, title FROM table INNER JOIN sphinx_category USING (category_id)
 

затем небольшой скрипт

 <?php 
$cats = getCol("SELECT category_id FROM categories");
foreach ($cats as $cat) {
  query("UPDATE sphinx_category SET category_id = $cat");
  `indexer --buildstops filtered_index > words$cat.txt`;
}