如何通过sphinxql在sphinx中使用这样的查询?
SELECT t1.value_id, t1.option_id, COUNT(DISTINCT t1.product_id) AS total
FROM table1 t1
LEFT JOIN table1 t11 ON (oov2p.product_id = oov2p1.product_id)
WHERE t11.option_id = 10012 AND t11.value_id IN (456105035,2199381524)
GROUP BY t1.option_id, t1.value_id发布于 2021-04-30 11:22:52
Sphinx不支持连接,所以在Sphinx中没有简单的方法来运行这个查询。
发布于 2021-04-30 21:45:40
嗯,虽然sphinx本身不能在多个索引之间运行'join‘查询。
您可以在'sql_ query‘中使用'JOIN’,这样就可以创建一个'prejoined‘的sphinx索引,这样就可以运行这样的查询。
source mysource {
...
sql_query =
SELECT t1.product_id, t1.value_id, t11.option_id, GROUP_CONCAT(t11.value_id) as t11ids
FROM table1 t1
LEFT JOIN table1 t11 USING (product_id)
GROUP BY product_id
sql_attr_uint = option_id
sql_attr_multi = uint t11ids from field这将允许您运行如下所示的sphinxQL查询……
sphinxQL> SELECT id, option_id, COUNT(DISTINCT product_id) AS total
FROM myindex
WHERE option_id = 10012 AND t11ids IN (456105035,2199381524)
GROUP BY option_id;我已经简化了保存的确切属性,您的示例查询与来自多个表的值和option_ids有点混淆。。。所以这只是一个概念的演示,而不是一个完整的例子。
关键的一点是你要存储任何你想要过滤的列或者'group by‘(或者order!)作为索引中的实际属性,然后可以在sphinxql查询中使用它们!
(注意特殊的多值属性(mva)的使用,这是Sphinx独有的概念,其中多个值存储在一行中,就像GROUP_CONCAT()的输出一样。但允许相当复杂的索引,当源表是一对多关系时,存储“多”端的值)
https://stackoverflow.com/questions/67323407
复制相似问题