以下是我解决了这个问题:
首先,确保你有user_id
领域建立索引
请注意,这是明智的使用Keyword()
为user_id
因为我们希望Lucene来当搜索以及显示在结果中该数据。
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::Keyword('user_id', $row->user_id));
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('date_1', $row->date_1));
$doc->addField(Zend_Search_Lucene_Field::Text('title', $row->title));
$index->addDocument($doc);
//etc
接下来,在后端(编程),这将迫使所有结果,包括查询字符串(用户的搜索输入),并且该用户的user_id
添加一个布尔子查询。
$index = Zend_Search_Lucene::open($this->search_index);
// add user's input to parser
$query = Zend_Search_Lucene_Search_QueryParser::parse($query_string);
// add boolean query
$query_bool = new Zend_Search_Lucene_Search_Query_Boolean();
// add user id as a term
// note this is saying that a specific `user_id`
// must be found in a specific field (user_id)
$user_id = get_user_id(); // or use your own 'get user id' function
$term = new Zend_Search_Lucene_Index_Term($user_id, 'user_id');
$subquery1 = new Zend_Search_Lucene_Search_Query_Term($term);
// construct boolean requiring both user id and string
$query_bool->addSubquery($query, true); // required
$query_bool->addSubquery($subquery1, true); // required
$query_result = $index->find($query_bool);
有你有它。
现在,如果用户123
搜索“约会”,Lucene会使搜索实际上是类似于appointment AND user_id=123
。
让我知道是否有任何方法可以改善这一点 - 很高兴与您讨论。