| *␊ |
| * @param string Query string.␊ |
| * @param int Project id to limit the results (null)␊ |
| * @param string Stemmer class.␊ |
| * @return array Results.␊ |
| * @param string Model class (null)␊ |
| * @param string Stemmer class ('Pluf_Text_Stemmer_Porter')␊ |
| * @return array Results␊ |
| */␊ |
| public static function mySearch($query, $project=null, $stemmer='Pluf_Text_Stemmer_Porter')␊ |
| public static function mySearch($query, $project=null, $model=null, $stemmer='Pluf_Text_Stemmer_Porter')␊ |
| {␊ |
| $query = Pluf_Text::cleanString(html_entity_decode($query, ENT_QUOTES, 'UTF-8'));␊ |
| $words = Pluf_Text::tokenize($query);␊ |
|
| if (in_array(null, $word_ids)) {␊ |
| return array();␊ |
| }␊ |
| return self::mySearchDocuments($word_ids, $project);␊ |
| return self::mySearchDocuments($word_ids, $project, $model);␊ |
| }␊ |
| ␊ |
| /**␊ |
|
| *␊ |
| * @param array Ids.␊ |
| * @param IDF_Project Project to limit the search.␊ |
| * @param string Model class to limit the search.␊ |
| * @return array Sorted by score, returns model_class, model_id and score.␊ |
| */␊ |
| public static function mySearchDocuments($wids, $project)␊ |
| public static function mySearchDocuments($wids, $project, $model)␊ |
| {␊ |
| $db =& Pluf::db();␊ |
| $gocc = new IDF_Search_Occ();␊ |
|
| $where[] = $db->qn('word').'='.(int)$id;␊ |
| }␊ |
| $prj = (is_null($project)) ? '' : ' AND project='.(int)$project->id;␊ |
| $select = 'SELECT model_class, model_id, SUM(pondocc) AS score FROM '.$gocc->getSqlTable().' WHERE '.implode(' OR ', $where).$prj.' GROUP BY model_class, model_id HAVING COUNT(*)='.count($wids).' ORDER BY score DESC';␊ |
| $md = (is_null($model)) ? '' : ' AND model_class='.$db->esc($model);␊ |
| $select = 'SELECT model_class, model_id, SUM(pondocc) AS score FROM '.$gocc->getSqlTable().' WHERE '.implode(' OR ', $where).$prj.$md.' GROUP BY model_class, model_id HAVING COUNT(*)='.count($wids).' ORDER BY score DESC';␊ |
| return $db->select($select);␊ |
| }␊ |
| ␊ |