MVA是否可以使用Sphinx中的文本字段?

时间:2018-03-29 14:13:56

标签: sphinx

我正在使用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表只存储orderIDtypeID

但是,我现在想要索引类型名称(我使用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,但有两处小改动:

  1. 我添加了一个额外的联接来获取类型名称
  2. 我删除了单位,因为我不希望这是一个整数
  3. 我在MySql中尝试了Select,它按预期工作。

    然而,从SphinxQL

    中选择时,字段和值都不会显示,也不会显示在单个记录中
    `Select * from idx_Table`
    

    在检查Sphinx指数结构时也不是

    `Desc idx_Table`
    

1 个答案:

答案 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属性具有相同的顺序。