我们正在使用Sphinx 2.0.1-beta并希望用PHP-API更新MVA-Attributes。 出现这个错误,但是当我使用命令行工具来验证索引更新成功,我只是得到这个错误信息的方法调用后:如何使用PHP-API更新sphinx MVA属性?
“搜索出错:池内存上装载持久MVA值“。
因此更新不能按预期方式工作。
- 在[searchd的] /usr/local/sphinx/etc/test.config的-section我们插入:
mva_updates_pool = 128M
- 然后我们实现了一个类更新sql_attr_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,$ valu es,true);
方法调用返回'3'(成功更新文档的数量(0或更多),失败时返回-1)。
有人有任何想法为什么会发生此错误?
我给了一个答案,但后来看到它并没有真正适用于你的问题 – Rafa