如何使用PHP-API更新sphinx 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值,我们稍微扩展了这个类

我们正在使用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值,我们稍微扩展了这个类
  • 当我们用PHP API文件调试代码时

    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。也许你已经在循环或任何复杂模式中更新了它们?因为不可能总是回收释放属性的内存。我给出了一个答案,但后来发现它并不适用于您的问题