Как считать результаты в сфинксе? - PullRequest
1 голос
/ 19 апреля 2011

Мне приходится иметь дело с запросами, которые имеют много результатов, но я показываю их только в наборах по 20-30 строк.

Затем я использую метод SetLimits () из php API.

Но мне нужно знать, каково общее количество результатов, чтобы рассчитать количество страниц (или наборов результатов)

Единственный способ, которым я могу сделать это прямо сейчас, это получить все результаты, установивограничьте до 10000000 и посмотрите, что находится в ключе «total» массива, возвращаемого sphinx, но это не хорошо, потому что мне нужно только число count (), я не хочу sphinx создавать огромный массив свсе идентификаторы.

Выполнение запроса select..count () в mysql не будет работать, потому что индексированные данные в sphinx всегда разные.

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 19 апреля 2011

Разве SphinxClient: запрос возвращает данные о том, сколько записей соответствует вашему запросу?

"total" - это количество записей, возвращаемых этим запросом (зависит от SetLimit) и total_foundкак я понимаю, это общее количество результатов, соответствующих запросу (не затронутое SetLimit).

4 голосов
/ 19 апреля 2011

Согласно инструкции: SphinxClient :: setLimits ,

Это должно сработать

  $cl->SetLimits(0,0);

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

Дайте мне знать, работает ли оно, поэтому я могу удалить ответ, если это не так.

Я также нашелчто SELECT..COUNT() не работает в запросе Sphinx, поэтому вы правы в этом.

Кроме того, согласно документации Sphinx, вы можете получить количество результатов, используя запрос SHOW META.

SHOW META

SHOW META показывает дополнительную мета-информацию о последнем запросе, такую ​​как время запроса и статистика ключевых слов:

mysql> SELECT * FROM test1 WHERE MATCH('test|one|two');
+------+--------+----------+------------+
| id   | weight | group_id | date_added |
+------+--------+----------+------------+
|    1 |   3563 |      456 | 1231721236 |
|    2 |   2563 |      123 | 1231721236 |
|    4 |   1480 |        2 | 1231721236 |
+------+--------+----------+------------+
3 rows in set (0.01 sec)

mysql> SHOW META;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| total         | 3     |
| total_found   | 3     |
| time          | 0.005 |
| keyword[0]    | test  |
| docs[0]       | 3     |
| hits[0]       | 5     |
| keyword[1]    | one   |
| docs[1]       | 1     |
| hits[1]       | 2     |
| keyword[2]    | two   |
| docs[2]       | 1     |
| hits[2]       | 2     |
+---------------+-------+
12 rows in set (0.00 sec)

Ссылки:

1 голос
/ 05 июля 2012
SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS WHERE
VARIABLE_NAME LIKE 'SPHINX_TOTAL_FOUND';

для получения дополнительной информации

SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS WHERE
VARIABLE_NAME LIKE 'SPHINX_%';
...