Я пытаюсь написать запрос SphinxQL, который бы дублировал следующий MySQL в индексе Sphinx RT:
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-индексами, и я ДЕЙСТВИТЕЛЬНО предпочел бы не переключаться с них.