2011-11-20 111 views
0

我想写一个SphinxQL查询,将复制下面的MySQL在狮身人面像RT指数:复杂SphinxQL查询

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') 

正如你可以看到,我试图让所有的行,其中一个字符串列匹配一定的值,匹配值的列表,其中混合和匹配字符串和整数列/值)

这是我在SphinxQL到目前为止得到的任何一个:

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

p我遇到的问题是匹配所有可能的可选字符串值。最好的可能的查询(如果有多个匹配语句被允许,他们被允许作为表达式)会是这样的

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索引,我真的不想从它们切换。

回答

2

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

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

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

不知道你为什么会需要MVA,但是他们现在都支持RT索引在2.0.2

+0

这些都是想着我一直有相同线路。 我会使用MVA来保存CRC'字符串的列表,然后我可以检查(如标签) –