能否在Sphinx中以OR条件组合两个独立查询?当前尝试返回零结果
在Sphinx中组合两个查询块的OR条件
嘿,我来帮你搞定这个Sphinx查询的问题!你想要把两个完整的查询用OR逻辑组合起来,这种需求完全是可行的,只是你之前的写法有个小问题——没有用括号把每个独立的查询块包裹起来,导致Sphinx无法正确解析你的OR逻辑。
问题出在哪?
你之前的写法是:
$partialQuery3 = $partialQuery1 . " OR(|) " . $partialQuery2;
Sphinx的查询语法里,OR的优先级比较低,如果不用括号包裹每个查询组,它会把@col1 txt1和后面的内容错误地拆分匹配,最终的查询逻辑完全不符合你的预期,所以才会返回0条结果。
正确的写法
你需要把每个独立的查询块用括号括起来,让Sphinx明确知道OR是作用在两个完整的条件组上:
// 用OR关键字的写法 $partialQuery3 = "(" . $partialQuery1 . ") OR (" . $partialQuery2 . ")"; // 或者用|符号的写法(和OR等价) $partialQuery3 = "(" . $partialQuery1 . ") | (" . $partialQuery2 . ")";
对应到你的具体查询,组合后的完整查询字符串会是:
(@col1 txt1 @col2 txt2 @col3 txt3) OR (@col1 txt4 @col2 txt5 @col3 txt6)
这样Sphinx就会正确执行逻辑:匹配第一个查询的所有字段条件,或者匹配第二个查询的所有字段条件,完全符合你的需求,而且不需要拆分每个字段去用|拼接关键词。
额外小提示
如果你的查询里本身包含括号或者特殊字符,记得提前做好转义,但在你的这个场景里,两个partialQuery都是纯字段+关键词的结构,不需要额外处理。
内容的提问来源于stack exchange,提问作者VVB
相关产品推荐
相关产品推荐

