我正在使用sphinx configuration
中的查找表索引id。
sql_attr_multi = uint customer_type_id from ranged-query; \
SELECT f.orderID AS ID, f.typeID \
FROM LUT_customerType f \
WHERE f.orderID BETWEEN \$start AND \$end \
ORDER BY f.orderID; \
SELECT MIN(orderID), MAX(orderID) FROM LUT_customerType
例如,在给定字段中返回:
customer_type_id: 3,5.15
由于LUT表只存储orderID
和typeID
但是,我现在想要索引类型名称(我使用MySql来查询它,但我希望这会更有效。)
我试过这样做:
sql_joined_field = customer_type_name from ranged-query; \
SELECT f.orderID AS ID, n.Name \
FROM LUT_customerType f \
INNER JOIN customerType_Names n ON f.typeID= n.ID \
AND f.orderID BETWEEN \$start AND \$end \
ORDER BY f.orderID; \
SELECT MIN(orderID), MAX(orderID) FROM LUT_customerType
换句话说,我复制了工作MVA
Select
,但有两处小改动:
我在MySql中尝试了Select
,它按预期工作。
然而,从SphinxQL
`Select * from idx_Table`
在检查Sphinx指数结构时也不是
`Desc idx_Table`
答案 0 :(得分:0)
好sql_joined_field
正在制作字段 ...字段是全文可搜索字段。
它们不会存储在索引中,以这种方式可以将它们检索到[' (仅用于查询)。
另一方面,属性,如MVA, 可检索,因为它们是由document-id存储的。
Sphinx没有多值 String 属性,甚至没有标量字符串属性,可以使用'查询' (比如mva / joined-field)。
如果想要一个连接的字符串属性,请在主GROUP_CONCAT
中使用sql_query
mysql聚合函数 - 以及GROUP BY
(sql_attr_multi
也可以解析逗号分隔的字符串,例如从主sql_query
中的字段用GROUP_CONCAT构建。所以可以在主查询中构建mva和joined-string-attribute ,无需单独查询)
例如......
sql_query = SELECT o.orderID, description, \
GROUP_CONCAT(f.typeID) as customer_type_id, \
GROUP_CONCAT(n.Name SEPERATOR ' ' ORDER BY n.ID) AS customer_type_name \
FROM orders o \
LEFT JOIN LUT_customerType f ON (f.orderID = o.orderID) \
LEFT JOIN customerType_Names n ON (f.typeID= n.ID) \
GROUP BY o.orderID \
ORDER BY NULL
sql_attr_multi = uint customer_type_id from field;
sql_field_string = customer_type_name
(可以使用sql_attr_string
代替,如果只想要属性,也不要将它作为一个字段也是如此)
...在实践中,也可能使它成为远程查询,就像你的小查询一样。
还要注意GROUP_CONCAT中的ORDER BY。由于sphinx会将MVA重新排序为数字顺序,因此可确保text属性具有相同的顺序。