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() 的输出)。但允许漂亮的复杂索引,当源表是一对多关系时,从“多”方存储值)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...