2017-05-01 5 views
0

OR로 AND 조건을 수행 할 수 있습니까? 이것은 단지 AND 내 간단한 스핑크스 쿼리 ...사고 스핑크스의 AND 및 OR 조건

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 

내가 OR ... 같은 뭔가를 추가 할이 ...

입니다

WHERE (MATCH('@sub_category_ids [4]') AND `canonical_type` = 1916160457 OR MATCH('@sub_category_ids [4]') AND `canonical_type` = 4282022807) 
이있는 ID를 검색 할 수 있도록

입니다.

Thinking Sphinx에서 어떻게해야할지 잘 모름.

감사합니다.

답변

0

이것은 스핑크스 자체의 한계입니다. 그것은 doesn 지원 또는 어디에서 (중첩) - 그것은 왜 생각 스핑크스에없는 이유입니다.

그러나

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

은 SphinxQL과 같이 쓸 수있다 :

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

가 ... 즉, IN() 연산자가 좀 'OR'과 같다. thinkinx - 스핑크스가 http://freelancing-gods.com/thinking-sphinx/searching.html#filters

에 따라 배열

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

에 자동으로 않는 경우 놀라지 않을 것