我已经在我的应用程序中设置了搜索,但希望将其扩展为以一对多方式关联的索引属性。例如,一个人可以有多个用户名,因此必须将它们分开,如下例所示:
person:
id: ~
name: {type: varchar(100), required: true}
username:
person_id: {type: integer, foreignTable: person, foreignReference: id}
username: {type: varchar(20), primaryKey: true, required: true}
到目前为止,我已经按照Jobeet 示例在我的应用程序中使用 Zend Lucene,并且可以在 Person 中搜索名称的属性,例如 Name。
我找不到通过 Symfony 或 Lucene 自动执行此操作的任何方法,因此我尝试将项目添加到 Person 的索引中,如下所示:
foreach ($this->getUsernames() as $i => $username)
{
$doc->addField(Zend_Search_Lucene_Field::Text('username' . $i,
$username->getUsername(), 'utf-8'));
}
然后,每当通过更新用户名的保存功能添加新用户名时,我都会尝试更新此索引:
public function save(PropelPDO $con = null)
{
$ret = parent::save($con);
// reindex the person
$person = $this->getPerson();
$person->save();
return $ret;
}
只要这个人是在运行时创建的,它就可以正常工作,但是如果从固定装置加载,则getUsernames()
不会返回任何内容。代码执行了两次(一次是在加载 Person 时,一次是在添加用户名时)。这有什么原因吗?我能以某种方式解决这个问题吗?
这样做的另一种方式也将不胜感激。Lucene 似乎可以使用 Zend_Lucene_Search_Interface_MultiSearcher 类搜索多个索引,如本问题所述。但是,我似乎无法让这个工作。
我在这里发现了一个类似的问题,但没有找到任何指针。
我现在使用 Propel 1.6。