#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`;
}