2011-11-20 110 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'字符串的列表,然後我可以檢查(如標籤) –