2017-06-08 2 views
0

Notre ThinkingSphinx indexe une table avec plus de 500 millions d'enregistrements. Nous essayons de trouver 120 000 enregistrements correspondant à une requête donnée. Cependant, je ne veux pas changer le max_matches de peur que nous manquerons de RAM.Modifier dynamiquement ThinkingSphinx max_matches/offset

De toute évidence, l'erreur que nous obtenons est:

Exception ThinkingSphinx::SphinxError -> offset out of bounds (offset=100000, max_matches=100000) 

<query> 
AND `sphinx_deleted` = 0 LIMIT 100000, 1000 OPTION max_matches=100000; 

est-il un moyen de soit:

  1. changer dynamiquement le max_matches si je ne l'ai pas assez de réponses agrégées?
  2. Une meilleure solution qui me manque?

Répondre

0

Eh bien, vous pouvez simplement définir juste aussi grand que vous avez besoin. Par exemple, définissez max_matches pour compenser + limite.

c.-à-LIMIT 100000, 1000 OPTION max_matches=101000 ou LIMIT 7000, 1000 OPTION max_matches=8000

0

Vous savez peut-être de ce déjà, mais juste au cas où: le réglage max_matches dans config/thinking_sphinx.yml est le maximum absolu. Cependant, vous pouvez transmettre :max_matches à n'importe quelle requête de recherche pour limiter les résultats maximums pour cette requête de recherche. Par conséquent, pourriez-vous définir max_matches dansà 120 000, puis vous assurer que vous appliquez une valeur inférieure pour la plupart des recherches, sauf celle-ci en particulier?