この問題を解決した方法は次のとおりです。
まず、user_id
インデックスを作成するときにフィールドを含めるようにしてください
Luceneにこのデータを検索して結果に表示させたいので、を使用Keyword()
するのが賢明であることに注意してください。user_id
$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
ます。
これを改善する方法があるかどうか教えてください-話し合ってうれしいです。