使用PHP API在sphinxSE中构建一个复杂的查询

时间:2014-03-15 15:36:51

标签: sql sphinx

我正在使用Sphinx PHP API,但提供的方法似乎很简单,只有一个select和single索引,但是如何构建一个涉及2个索引连接的查询?例如

之类的东西
select * from index1,index2 where index1.key1=index2.key2;

以下是Sphinx API Client的关键方法:

$cl->SetServer ( $host, $port );
$cl->SetConnectTimeout ( 1 );
$cl->SetArrayResult ( true );
$cl->SetWeights ( array ( 100, 1 ) );
$cl->SetMatchMode ( $mode );
if ( count($filtervals) )   $cl->SetFilter ( $filter, $filtervals );
if ( $groupby )             $cl->SetGroupBy ( $groupby, SPH_GROUPBY_ATTR, $groupsort );
if ( $sortby )              $cl->SetSortMode ( SPH_SORT_EXTENDED, $sortby );
if ( $sortexpr )            $cl->SetSortMode ( SPH_SORT_EXPR, $sortexpr );
if ( $distinct )            $cl->SetGroupDistinct ( $distinct );
if ( $select )              $cl->SetSelect ( $select );
if ( $limit )               $cl->SetLimits ( 0, $limit, ( $limit>1000 ) ? $limit : 1000 );
$cl->SetRankingMode ( $ranker );
$res = $cl->Query ( $q, $index );

2 个答案:

答案 0 :(得分:0)

Sphinx不支持'加入'

您可以通过' UNION'一次搜索多个索引,即依次搜索每个索引并附加结果(并使用整体排序顺序获取结果)。

但结果集中的一行总是来自一个索引。

(请记住,sphinx是一个全文查询引擎,不是关系数据库引擎,即使它确实提供了类似SQL的查询语言 - 只是因为它是一个熟悉的概念)

答案 1 :(得分:0)

即使它有很多行,你也可以创建一个索引来连接索引1和1中的源使用数据。 2(但请记住,你需要在第一个col上有一个唯一的id)

所有数据都在一个索引中。