微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sphinxql 查询 mysql

如何解决sphinxql 查询 mysql

如何通过 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

解决方法

Sphinx 不支持连接,因此在 Sphinx 中运行此查询并不容易。

,

好吧,虽然 sphinx 本身不能在多个索引之间运行“连接”查询。

您可以在“sql_query”中使用“JOIN”,因此可以创建一个“预连接”的 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;

我已经简化了保存的确切属性,您的示例查询与来自多个表的 value 和 option_ids 有点混淆。 .. 所以它只是为了演示这个概念,而不是一个完整的例子。

关键点是您将要过滤或“分组依据”(或排序!)的任何列存储为索引中的实际属性,然后可以在 sphinxql 查询中使用它们!>

(注意特殊多值属性 (mva) 的使用,这是 Sphinx 的一个非常独特的概念,其中多个值存储在一行中,如 GROUP_CONCAT() 的输出)。但允许漂亮的复杂索引,当源表是一对多关系时,从“多”方存储值)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。