CakePHP中Sphinx中的MultiQueries

时间:2011-11-28 10:39:57

标签: cakephp sphinx

$query = '@(name,email,bio) ' . '"' . $this->passedArgs['name'] . '"~100';
$query2 = '@(name,email,bio) ' . '"' . $this->passedArgs['name'] . '"~300'
$query3 = '@(name,email,bio) ' . '"' . $this->passedArgs['name'] . '"/3';
$query4 = '@(name,email,biot) ' . '"' . $this->passedArgs['name'] . '"/1';

我想在一个查询中执行此操作!如果我使用“|” OR运算符,大约需要2分钟才能显示结果!

无论如何在sphinxapi中使用multiquery我可以将所有这些查询合并为一个吗?

3 个答案:

答案 0 :(得分:0)

你可以尝试

@(name,email,bio) ( "one two"~100 | "one two"~300 | "one two"/3 | "one two"/1 )

可能会更快一些。

答案 1 :(得分:0)

如果我理解(根据您的评论),您在$this->passedArgs['name']字段中查找@(name,email,bio) ~100字符 {{1}字符至少~300字匹配 OR 至少/3字匹配?

为什么不把它分成两个不同的查询,最先限制的是:

/1

一起执行这些查询$query = '@(name,email,bio) ' . '"' . $this->passedArgs['name'] . '"~100'; $query4 = '@(name,email,bio) ' . '"' . $this->passedArgs['name'] . '"/1'; d。如果您没有得到任何结果,请执行以下查询,同时| d。

|

答案 2 :(得分:0)

我使用OR(|)运算符尝试了单个查询,Sphinx没有返回准确的结果。后来发现了AddQuery函数,它帮助我从多个查询中获取结果并合并为一个。

我甚至可以为每个查询指定单独的索引。请参阅Sphinx Documentation AddQuery

    $cl->AddQuery('@(name,email,bio) "one two" ~100', 'dist'); 
    $cl->AddQuery('@(name,email,bio) "one two" ~300', 'dist'); 
    $cl->AddQuery('@(name,email,bio) "one two" ~300', 'dist'); 
    $cl->AddQuery('@(name,email,bio) "one two" /3', 'dist'); 
    $cl->AddQuery('@(name,email,bio) "one two" ~/1', 'metaphone dist'); 
    $result = $cl->RunQueries();
    echo "<pre>",print_r($result),"</pre>";

我执行了SetIndexWeights调用以优先处理我使用过的多个索引。请参阅Sphinx Document SetIndexWeights