Sphinx: использование SetGroupBy для сортировки групп с использованием агрегатных функций - PullRequest
1 голос
/ 25 февраля 2010

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

Мы определили источник с кучей атрибутов, включая:

  sql_attr_uint = CategoryId
  sql_attr_str2ordinal = SortableName

Без группировки мы можем сортировать результаты, используя SortableName (например, сортировать по названию продукта в порядке возрастания или убывания), например, используя. $sphinx->SetSortMode(SPH_SORT_ATTR_DESC, 'SortableName')

Когда мы пытаемся сгруппировать по CategoryId, мы хотим выбрать продукт с «самым низким» именем, а затем отсортировать группы по этому значению. Мы попробовали это безуспешно:

  $sphinx->SetGroupBy('CategoryId', SPH_GROUPBY_ATTR, 'MIN(SortableName) asc');

После небольшого неправильного толкования документов мы попытались:

  $sphinx->SetSelect('MIN(SortableName) AS FirstName');
  $sphinx->SetGroupBy('CategoryId', SPH_GROUPBY_ATTR, 'FirstName asc');

Это тоже не работает.

Примечательно, что мы пытаемся сделать это, используя поле sql_attr_str2ordinal - которое мы хотим рассматривать просто как число. Когда мы попробовали это с помощью API C #, мы получили ошибку сфинкса о том, что «атрибут sortablename имеет неподдерживаемый тип (type = 3)»

Есть идеи, как сортировать группы таким образом?

...