如何使用PHP-API更新sphinx MVA属性?
我们正在使用Sphinx2.0.1-beta,希望用PHP-API更新MVA属性。 方法调用后会出现此错误,但当我使用命令行工具验证索引更新是否成功时,我只收到以下错误消息: “搜索错误:加载持久MVA值时池内存不足。” 因此,更新没有按预期工作如何使用PHP-API更新sphinx MVA属性?,php,sphinx,Php,Sphinx,我们正在使用Sphinx2.0.1-beta,希望用PHP-API更新MVA属性。 方法调用后会出现此错误,但当我使用命令行工具验证索引更新是否成功时,我只收到以下错误消息: “搜索错误:加载持久MVA值时池内存不足。” 因此,更新没有按预期工作 在/usr/local/sphinx/etc/test.config的[searchd]部分,我们插入了: mva\u更新\u池=128M 然后我们实现了一个类来更新sql\u attr\u uint值,这非常好。为了使用MVA值,我们稍微扩展了这个类
function UpdateAttributes ( $index, $attrs, $values, $mva=false )
{
// verify everything
assert ( is_string($index) );
assert ( is_bool($mva) );
assert ( is_array($attrs) );
foreach ( $attrs as $attr )
assert ( is_string($attr) );
assert ( is_array($values) );
foreach ( $values as $id=>$entry )
{
assert ( is_numeric($id) );
assert ( is_array($entry) );
assert ( count($entry)==count($attrs) );
foreach ( $entry as $v )
{
if ( $mva )
{
assert ( is_array($v) );
foreach ( $v as $vv )
assert ( is_int($vv) );
var_dump($vv);
} else
assert ( is_int($v) );
}
}
...
在if($mva)测试之后,我们得到$vv的值
$attrs:
array(1) {
[0]=>
string(12) "attributeKey"
}
美元价值:
array(2) {
[182371746]=>
array(1) {
[0]=>
array(2) {
[0]=>
int(1)
[1]=>
int(10)
}
}
[182371749]=>
array(1) {
[0]=>
array(2) {
[0]=>
int(2)
[1]=>
int(11)
}
}
}
方法调用:
$sphinxClient->UpdateAttributes($destinationIndex',$attrs,$values,true)
方法调用返回“3”(成功时为更新文档的数量(0或更多),失败时为-1)
有人知道发生此错误的原因吗?错误消息说有许多已更新的MVA属性,您的MVA池内存不足。是的,问题是,我将MVA池内存设置为128M,只更新了五到六个属性。这样做不可能使用如此多的RAM。也许你已经在循环或任何复杂模式中更新了它们?因为不可能总是回收释放属性的内存。我给出了一个答案,但后来发现它并不适用于您的问题