MVA 是否可以与 Sphinx 中的文本字段一起使用?
Will MVA work with text fields in Sphinx?
我在 sphinx configuration
.
中通过查找 table 索引一个 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
这个returns,例如,在给定的字段中:
customer_type_id: 3,5.15
因为 LUT table 只是存储 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`
好吧 sql_joined_field
正在制作一个 Field ...字段是 full-text 可搜索字段。
它们不存储在索引中,因此它们可以 'retrieved'(仅用于查询)。
另一方面,属性 与 MVA 一样, 可检索,因为它们由 document-id 存储。
Sphinx 没有 Multi-Value String 属性,甚至没有可以用 'query' 构建的标量字符串属性(例如 mva/joined-field).
如果想要连接的字符串属性使用 GROUP_CONCAT
mysql 聚合函数,在主 sql_query
- 以及 GROUP BY
(sql_attr_multi
也可以解析逗号分隔的字符串,例如用 GROUP_CONCAT 从主 sql_query
中的字段构建。因此可以同时构建 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 重新排序为数字顺序,这可确保文本属性具有相同的顺序。
我在 sphinx configuration
.
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
这个returns,例如,在给定的字段中:
customer_type_id: 3,5.15
因为 LUT table 只是存储 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`
好吧 sql_joined_field
正在制作一个 Field ...字段是 full-text 可搜索字段。
它们不存储在索引中,因此它们可以 'retrieved'(仅用于查询)。
另一方面,属性 与 MVA 一样, 可检索,因为它们由 document-id 存储。
Sphinx 没有 Multi-Value String 属性,甚至没有可以用 'query' 构建的标量字符串属性(例如 mva/joined-field).
如果想要连接的字符串属性使用 GROUP_CONCAT
mysql 聚合函数,在主 sql_query
- 以及 GROUP BY
(sql_attr_multi
也可以解析逗号分隔的字符串,例如用 GROUP_CONCAT 从主 sql_query
中的字段构建。因此可以同时构建 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 重新排序为数字顺序,这可确保文本属性具有相同的顺序。