思维狮身人面像中的AND和OR条件

时间:2017-05-01 13:12:32

标签: sphinx thinking-sphinx

是否可以使用OR进行类似AND条件的操作?

这是我的简单狮身人面像查询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

我想添加一个OR ......类似......

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

这样我就可以搜索不同canonical_type的ID。

不确定如何在Thinking Sphinx中做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:0)

这实际上是Sphinx本身的限制。它不支持WHERE(也不是嵌套)中的OR - 这就是为什么它不在思考 - 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')] }

基于enter image description here