我正在尝试编写一个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索引不支持这些,我真的不希望切换它们。
发布于 2011-11-21 05:37:23
一种方法是简单地将所有列转换为普通字段。然后,您可以将所有这些逻辑放入MATCH(..)中。即不使用属性。
是的,每个查询只能有一个匹配项。
否则,是的,您可以使用CRC技巧将字符串属性转换为整数属性,以便用于过滤。
不知道为什么需要MVA,但是2.0.2中的RT索引现在支持它们
https://stackoverflow.com/questions/8199922
复制相似问题