复杂SphinxQL查询

复杂SphinxQL查询,sphinx,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') 如您所见,我正在尝试获取一个字符串列与某个值匹配的所有行,以及与值列表中的任何一个匹配的行,该列表混合并匹配字符串和

我正在尝试编写一个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')
如您所见,我正在尝试获取一个字符串列与某个值匹配的所有行,以及与值列表中的任何一个匹配的行,该列表混合并匹配字符串和整数列/值)

这就是我在SphinxQL中得到的结果:

SELECT id, (intColA = intValA OR intColB = intValB ...) as intCheck FROM rt_index WHERE MATCH('@requiredMatch = requiredValue');
我遇到的问题是匹配所有可能的可选字符串值。最好的查询(如果允许多个匹配语句,并允许它们作为表达式)如下

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索引不支持这些方法,我真的不希望从它们中进行切换。

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

是,每个查询只能有一个匹配项

否则,可以使用CRC技巧将字符串属性转换为整数属性,以便用于过滤


不确定为什么需要MVA,但2.0.2中的RT索引现在支持MVA,这与我的想法相同。我会使用MVA保存一个CRC'ed字符串列表,然后可以对其进行检查(如标记)