Jak udělat SELECT COUNT ve Sphinx
- neznamy_uzivatel
- Člen | 115
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
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)