如何使用PHP-API更新sphinx MVA属性?

时间:2011-06-29 09:22:04

标签: php sphinx

我们正在使用Sphinx 2.0.1-beta,并希望使用PHP-API更新MVA-Attributes。 在方法调用之后出现此错误,但是当我使用命令行工具验证索引更新成功时,我只是收到此错误消息:

“搜索错误:加载持久性MVA值时,池内存不足。”

因此更新无法按预期工作。

  1. 在我们插入的/usr/local/sphinx/etc/test.config的[searchd]部分中:
  2. mva_updates_pool = 128M

    1. 然后我们实现了一个类来更新sql_attr_uint值,这非常正常。为了使用MVA值,我们对这个类进行了一些扩展。
    2. 当我们使用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的值。

      1. 数据结构的一个例子,我们用作更新函数的参数:
      2. 伪码:

        $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)。

        有人知道为什么会出现这种错误吗?

1 个答案:

答案 0 :(得分:0)

错误消息显示有许多更新的MVA属性,并且您的MVA池内存耗尽。