【问题标题】:Complex SphinxQL Query复杂的 SphinxQL 查询
【发布时间】:2011-11-20 06:39:55
【问题描述】:

我正在尝试编写一个 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');

我遇到的问题是匹配所有潜在的可选字符串值。最好的查询(如果允许多个 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 索引不支持这些,我真的不想从它们切换。

【问题讨论】:

    标签: sphinx


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这些都是我一直以来的想法。我会使用 MVA 来保存经过 CRC 处理的字符串列表,然后我可以检查这些字符串(如标签)
    猜你喜欢
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2012-04-02
    • 2013-05-22
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多