сфинкс СГРУППИРОВАТЬ ПО

Собираюсь проиллюстрировать это, поэтому, пожалуйста, потерпите меня.

Это моя структура таблицы MYSQL, проиндексированная sphinx

------- ------- --------------
tag_id | tag   | foreign_id  |
------- ------- --------------
1       love     111
2       blue     222
3      lover     333
4       yellow   444
5       love     555
6       lov      666

То, что я пытаюсь получить от сфинкса, когда я запрашиваю «любовь», выглядит примерно так:

love = 2 hit
lover = 1 hit

Кто-нибудь знает, как это можно сделать? Я попробовал следующий php-код, но все, что он выводит, - это просто набор tag_id для «любви»

$cl->setGroupDistinct('tag');
$cl->setGroupBy('tag', SPH_GROUPBY_ATTR);  
$cl->SetLimits( 0, 10, 500);
$result = $cl->query("love", 'mytags');

Я даже пробовал это, но это не сработало

$cl->setGroupDistinct('tag');

Я думаю, что для решения этой проблемы можно использовать группу sphinx, но я совершенно невежественен. Помощь приветствуется! Спасибо!


person Patrick    schedule 01.02.2010    source источник


Ответы (2)


Я не думаю, что вы хотите использовать setGroupDistinct для того же атрибута, по которому вы группируете. В терминологии SQL это будет похоже на:

SELECT COUNT(DISTINCT tag)
FROM my_tags
GROUP BY tag

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

Я думаю, что если вы просто удалите вызов setGroupDistinct или измените отдельное поле на внешний идентификатор (таким образом, отфильтровав несколько идентичных тегов, прикрепленных к одной записи), все будет хорошо.

person Ty W    schedule 01.02.2010

Если вы хотите посчитать тег и заказать desc. вам следует добавить дополнительное предложение в функцию setGroupBy.

$cl->setGroupBy('tag', SPH_GROUPBY_ATTR,'@count desc');
$result = $cl->query('');
person hanjm    schedule 05.11.2016