2017-05-01 6 views
0

Ist es möglich, etwas wie eine UND-Bedingung mit OR zu tun?UND und ODER Bedingung in Denken Sphinx

Dies ist meine einfache Sphinx Abfrage mit AND nur ...

Job.search('', {with: {canonical_type: Zlib::crc32('SubCategory')}, conditions: { sub_category_ids: [4]}}) 

Sphinx Query (22.8ms) SELECT * FROM `job_core`, `job_delta` WHERE MATCH('@sub_category_ids [4]') AND `canonical_type` = 1916160457 AND `sphinx_deleted` = 0 LIMIT 0, 20 OPTION max_matches=50000 
    Sphinx Found 1 results 

Ich möchte ein ODER ... so etwas wie hinzufügen ...

WHERE (MATCH('@sub_category_ids [4]') AND `canonical_type` = 1916160457 OR MATCH('@sub_category_ids [4]') AND `canonical_type` = 4282022807) 

, so dass ich nach IDs mit verschiedenen canonical_type suchen kann.

Nicht sicher, wie es in Thinking Sphinx zu tun.

Danke!

Antwort

0

Dies ist tatsächlich eine Einschränkung von Sphinx selbst. Es unterstützt weder OR in WHERE (noch Nesting) - weshalb es nicht im Denken-Sphinx ist.

WHERE MATCH('@sub_category_ids [4]') AND `canonical_type` IN (1916160457,4282022807) 

... dh IN() Operator wie ist irgendwie 'OR':

Aber

WHERE (MATCH('@sub_category_ids [4]') AND `canonical_type` = 1916160457 
    OR MATCH('@sub_category_ids [4]') AND `canonical_type` = 4282022807) 

könnte als SphinxQL geschrieben werden. Würde mich nicht wundern, wenn thinkinx-Sphinx es automatisch mit einem Array tut

with: {canonical_type: [Zlib::crc32('SubCategory1'), Zlib::crc32('SubCategory2')] } 

basierend auf http://freelancing-gods.com/thinking-sphinx/searching.html#filters

Verwandte Themen