2016-03-28 10 views
1

Ich habe/hatte eine MySQL-Abfrage, die ziemlich schnell war mit z.Alternative zu Boolean ODER in Sphinx?

FieldA in (X,Y,Z) 

Ich bin zu Sphinx übergegangen, was deutlich schneller ist, AUSSER bei Verwendung von Rohren in diesem Fall, z.

@(FieldA) (X|Y|Z) 

Wo X | Y | Z sind tatsächlich etwa 40 verschiedene Werte. Der MysQl In dauert 0,3 Sekunden, die Sphinx dauert eine Minute. Angesichts der Tatsache, wie viel schneller Sphinx ist, frage ich mich, ob es eine 'IN' Version für Sphinx mit mehreren Werten gegen | gibt was es eindeutig verlangsamt.

Antwort

0

Wirklich es hängt von vielen Dingen ab. Bei bestimmten Abfragen ist die Verwendung eines MVA möglicherweise besser als die Verwendung von Keywords. (Sie haben eine 'IN'-Funktion)

... vor allem, wenn Sie andere Suchbegriffe haben.

Die Volltextindizierung von Sphinxes ist für die Beantwortung kurzer, vom Benutzer eingegebener Abfragen optimiert. Um eine lange ODER-Abfrage zu beantworten, muss jede Wortliste geladen und zusammengeführt werden. Und richte all das ein. Es ist alles über Kopf.

Während die attributbasierte Filterung im Allgemeinen ziemlich schnell ist, insbesondere wenn Sie eine hochselektive Keyword-Abfrage haben, die eine relativ kurze Liste potenzieller Treffer liefert.

+0

Danke, ich schaute auf die MVA-Seite in der Dokumentation und während es für mich jetzt vage einen Sinn ergibt, habe ich das Gefühl, dass es in diesem Fall eine schlechte Lösung für mich ist. Ich müsste für 100s von 1000s Möglichkeiten und dann 100s von Werten für jeden indexieren. Gibt es eine Möglichkeit, eine Sphinx Query mit einer MySql zu kombinieren? So kann ich zB "von idx wo MATCH ('Appel)" und "von Tabelle wo in (1,2,3, .., N')? – user3649739

+0

Nun, wirklich nicht sicher, dass es MVA benötigt, nur ein Standard-Einzelwert-Attribut würde reichen. Nur ein Wert pro Dokument richtig? - Nein kann SPhinx und Mysql nicht direkt mischen. Sie sind völlig unterschiedliche Systeme – barryhunter