И и ИЛИ състояние в мислещия сфинкс

Възможно ли е да се направи нещо като условие И с ИЛИ?

Това е моята проста заявка за сфинкс само с AND...

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

Бих искал да добавя ИЛИ... нещо като...

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

за да мога да търся идентификатори с различни canonical_type.

Не съм сигурен как да го направя в Thinking Sphinx.

Благодаря!


person rukia_kuchiki_21    schedule 01.05.2017    source източник


Отговори (1)


Това всъщност е ограничение на самия Sphinx. Не поддържа OR в WHERE (нито вмъкване) - поради което не е в thinking-sphinx.

Но

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-sphinx го направи автоматично с масив

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

въз основа на http://freelancing-gods.com/thinking-sphinx/searching.html#filters

person barryhunter    schedule 01.05.2017