Jak udělat SELECT COUNT ve Sphinx

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
neznamy_uzivatel
Člen | 115
+
0
-

Ahoj,
používám Sphinx (SphinxQL) a potřeboval bych zjistit k nějakému dotazu celkový počet položek.

Takže mám dotaz:

SELECT * FROM sphinx_index WHERE MATCH('search') AND c IN (1, 2, 3) LIMIT 0, 16

To mi vrátí 16 položek, ale já k tomu chci vědět ještě celkový počet odpovídajících řádků v db, tzn vlastně stejný dotaz, jen bez limitu:

SELECT * FROM sphinx_index WHERE MATCH('search') AND c IN (1, 2, 3)

S tím samozřejmě neuspěju a sphinx mi nesmyslně vrátí jen 20 řádků, pokud si LIMITem neřeknu o víc.

Našel jsem řešení v podobě SHOW META, kdy by LIMIT 0 mělo spočítat všechny řádky, takže:

SELECT * FROM sphinx_index WHERE MATCH('search') AND c IN (1, 2, 3) LIMIT 0
SHOW META

Bohužel položka ‚total‘ ve SHOW META počítá jen do 1000 (přitom odpovídají desetitisíce řádků)..
Nevíte co s tím?

Edit:
Když dám SHOW META v mysql pres ssh, tak je vysledek OK.
Z php pres mysql_connect/mysqli_connect uz je to spatne. Je tam jen ‚total‘ ⇒ 1000 a ostatni udaje o jednotlivych slovech chybi uplne :(

Editoval neznamy_uzivatel (16. 10. 2014 18:47)

neznamy_uzivatel
Člen | 115
+
0
-

Tak se mi to podařilo vyřešit, taže takhle:

Sphinx má omezení na 1000 výsledků v tom je základ problému.
Limit lze navýšit v konfiguračním souboru:

searchd
{
 ...
 max_matches = 20000
}

Toto navýšení ale samo o sobě nefunguje a musí se ještě 2× potvrdit v samotném dotazu – 1) LIMITem a 2) OPTIONem, takže upravený dotaz z původního postu by vypadal takto:

SELECT * FROM sphinx_index WHERE MATCH('search') AND c IN (1, 2, 3) LIMIT 0, 20000 OPTION max_matches = 20000
SHOW META

A tady už je ve výstupu očekávaný správný počet řádků.

Editoval neznamy_uzivatel (17. 10. 2014 21:45)