$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我可以将所有这些查询合并为一个吗?
答案 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