复杂的SphinxQL查询

时间:2011-11-20 06:39:55

标签: sphinx

我正在尝试编写一个SphinxQL查询,该查询将在Sphinx RT索引中复制以下MySQL:

SELECT id FROM table WHERE colA LIKE 'valA' AND (colB = valB OR colC = valC OR ... colX = valX ... OR colY LIKE 'valY' .. OR colZ LIKE 'valZ')

正如您所看到的,我正在尝试获取一个字符串列与特定值匹配的所有行,AND匹配值列表中的任何一个,这些值混合并匹配字符串和整数列/值)

这是我迄今为止在SphinxQL中所获得的:

SELECT id, (intColA = intValA OR intColB = intValB ...) as intCheck FROM rt_index WHERE MATCH('@requiredMatch = requiredValue');

我遇到的问题是匹配所有潜在的可选字符串值。最好的查询(如果允许多个MATCH语句并且允许它们作为表达式)将类似于

SELECT id, (intColA = intValA OR MATCH('@checkColA valA|valB') OR ...) as optionalMatches FROM rt_index WHERE optionalMatches = 1 AND MATCH('@requireCol requiredVal')

我可以看到使用CRC32字符串转换和MVA属性执行此操作的可能方法,但RT索引不支持这些,我真的不希望从它们切换。

1 个答案:

答案 0 :(得分:2)

一种方法是简单地将所有列转换为普通字段。然后你可以将所有这些逻辑放在MATCH(..)中。即不使用属性。

是的,每个查询只能有一个MATCH。

否则,是的,您可以使用CRC技巧将字符串属性转换为整数,因此可以用于过滤。

不确定为什么需要MVA,但现在在2.0.2的RT索引中支持它们