public function testTermQuery() { $objSearchTerm = new class_module_search_term("blub"); $objSearchQuery = new class_module_search_term_query($objSearchTerm); $arrResults = $this->getResultsFromQuery($objSearchQuery); $this->assertEquals(count($arrResults), 1, "simple term query (blub)"); $this->assertEquals($this->getCountFromQuery($objSearchQuery), 1); $objMetadataFilter = new class_module_search_metadata_filter(); $objMetadataFilter->setFilterModules(array(_search_module_id_)); $objSearchQuery->setMetadataFilter($objMetadataFilter); $arrResults = $this->getResultsFromQuery($objSearchQuery); $this->assertEquals(count($arrResults), 0, "metadata filter (blub)"); $this->assertEquals($this->getCountFromQuery($objSearchQuery), 0); $objMetadataFilter->setFilterModules(array(_system_modul_id_, _search_module_id_)); $objSearchQuery->setMetadataFilter($objMetadataFilter); $arrResults = $this->getResultsFromQuery($objSearchQuery); $this->assertEquals(count($arrResults), 1, "metadata filter (blub)"); $this->assertEquals($this->getCountFromQuery($objSearchQuery), 1); $objParser = new class_module_search_query_parser(); $objQuery = $objParser->parseText("subtitle:blub"); $arrResult = $this->getResultsFromQuery($objQuery); $this->assertEquals(count($arrResult), 1, "count error (subtitle:blub)"); $this->assertEquals($arrResult[0]["score"], 1, "field filter scoring (subtitle:blub)"); $this->assertEquals($this->getCountFromQuery($objSearchQuery), 1); $objQuery = $objParser->parseText("title:hallo"); $arrResult = $this->getResultsFromQuery($objQuery); $this->assertEquals(count($arrResult), 2); $this->assertEquals($arrResult[0]["score"], 1, "field filter scoring (title:hallo)"); $this->assertEquals($this->getCountFromQuery($objQuery), 2); $objQuery = $objParser->parseText("ipsum"); $arrResult = $this->getResultsFromQuery($objQuery); $this->assertEquals(count($arrResult), 1); $this->assertEquals($arrResult[0]["score"], 3, "field filter scoring (ipsum)"); $this->assertEquals($this->getCountFromQuery($objQuery), 1); }
public function testBooleanQuery() { $objSearchTerm1 = new class_module_search_term("hallo"); $objSearchTerm2 = new class_module_search_term("welt"); $objBooleanSearch = new class_module_search_boolean_query(); $objBooleanSearch->add($objSearchTerm1, class_module_search_boolean_query::BOOLEAN_CLAUSE_OCCUR_MUST); $objBooleanSearch->add($objSearchTerm2, class_module_search_boolean_query::BOOLEAN_CLAUSE_OCCUR_MUST); $arrResult = $this->getResultsFromQuery($objBooleanSearch); $this->assertEquals(count($arrResult), 2); $this->assertEquals($arrResult[0]["score"], 2); $this->assertEquals($this->getCountFromQuery($objBooleanSearch), 2); // One more optional search term $objSearchTerm3 = new class_module_search_term("blub"); $objBooleanSearch->add($objSearchTerm3, class_module_search_boolean_query::BOOLEAN_CLAUSE_OCCUR_SHOULD); $arrResult = $this->getResultsFromQuery($objBooleanSearch); $this->assertEquals(count($arrResult), 2); $this->assertEquals($arrResult[0]["score"], 4); $this->assertEquals($arrResult[1]["score"], 2); $this->assertEquals($this->getCountFromQuery($objBooleanSearch), 2); // Module metadata filter $objMetadataFilter = new class_module_search_metadata_filter(); $objMetadataFilter->setFilterModules(array(_system_modul_id_)); $objBooleanSearch->setMetadataFilter($objMetadataFilter); $arrResult = $this->getResultsFromQuery($objBooleanSearch); $this->assertEquals(count($arrResult), 1, "Metadata module filter"); $this->assertEquals($arrResult[0]["score"], 4); $this->assertEquals($this->getCountFromQuery($objBooleanSearch), 1); $objMetadataFilter->setFilterModules(array(_system_modul_id_, _search_module_id_)); $objBooleanSearch->setMetadataFilter($objMetadataFilter); $arrResult = $this->getResultsFromQuery($objBooleanSearch); $this->assertEquals(count($arrResult), 2, "Metadata module filter"); $this->assertEquals($this->getCountFromQuery($objBooleanSearch), 2); // must must mustNot Search $objParser = new class_module_search_query_parser(); $objQuery = $objParser->parseText("+hallo +welt -blub"); $arrResult = $this->getResultsFromQuery($objQuery); $this->assertEquals(count($arrResult), 1); $this->assertEquals($this->getCountFromQuery($objQuery), 1); $objParser = new class_module_search_query_parser(); $objQuery = $objParser->parseText("+hallo +subtitle:blub"); $arrResult = $this->getResultsFromQuery($objQuery); $this->assertEquals(count($arrResult), 1); $this->assertEquals($arrResult[0]["score"], 2, "field filter scoring"); $this->assertEquals($this->getCountFromQuery($objQuery), 1); $objQuery = $objParser->parseText("title:hallo"); $arrResult = $this->getResultsFromQuery($objQuery); $this->assertEquals(count($arrResult), 2); $this->assertEquals($arrResult[0]["score"], 1, "field filter scoring"); $this->assertEquals($this->getCountFromQuery($objQuery), 2); //test new Scoring $objQuery = $objParser->parseText("lorem ipsum"); $arrResult = $this->getResultsFromQuery($objQuery); $this->assertEquals(count($arrResult), 1); $this->assertEquals($arrResult[0]["score"], 4, "'lorem ipsum' scoring"); $this->assertEquals($this->getCountFromQuery($objQuery), 1); }
/** * builds the from and where restrictions of the current query * @param string &$strQuery * @param string[] &$arrParameters * @return void */ private function internalBuildQuery(&$strQuery, &$arrParameters) { $strQuery .= "FROM " . _dbprefix_ . "search_ix_document AS D\r\n INNER JOIN " . _dbprefix_ . "search_ix_content AS z\r\n ON search_ix_content_document_id = search_ix_document_id\r\n " . ($this->objMetadataFilter != null ? " LEFT JOIN " . _dbprefix_ . "system ON search_ix_system_id = system_id " : "") . "\r\n WHERE 1=1 "; //metadata filter if ($this->objMetadataFilter != null) { $this->objMetadataFilter->getQuery($strQuery, $arrParameters); } $strQuery .= " AND z.search_ix_content_content LIKE ? AND D.search_ix_document_id = z.search_ix_content_document_id "; $arrParameters[] = $this->getObjTerm()->getStrText() . "%"; if ($this->getObjTerm()->getStrField() != null) { $strQuery .= "AND search_ix_content_field_name = ? "; $arrParameters[] = $this->getObjTerm()->getStrField(); } }
/** * Adds the queried tables and the filter-restrictions to the generated query * @param string $strQuery * @param string[] $arrParameters */ private function internalBuildQuery(&$strQuery, &$arrParameters) { $strQuery .= "FROM (SELECT search_ix_document_id, search_ix_system_id from " . _dbprefix_ . "search_ix_document AS D\r\n " . ($this->objMetadataFilter != null ? " LEFT JOIN " . _dbprefix_ . "system ON search_ix_system_id = system_id " : "") . "\r\n WHERE "; $strWhereMust = "1=1 "; // metadata filter if ($this->objMetadataFilter != null) { $this->objMetadataFilter->getQuery($strWhereMust, $arrParameters); } /* @var $objTerm class_module_search_term */ foreach ($this->arrMustNotOccurs as $objTerm) { $strWhereMust .= "AND NOT EXISTS (select 1 from " . _dbprefix_ . "search_ix_content WHERE search_ix_content_content= ? " . ($objTerm->getStrField() != null ? " AND search_ix_content_field_name = ? " : "") . " AND search_ix_document_id = search_ix_content_document_id) "; $arrParameters[] = $objTerm->getStrText(); if ($objTerm->getStrField() != null) { $arrParameters[] = $objTerm->getStrField(); } } /* @var $objTerm class_module_search_term */ foreach ($this->arrMustOccurs as $objTerm) { $strWhereMust .= "AND exists (select 1 from " . _dbprefix_ . "search_ix_content WHERE search_ix_content_content= ? " . ($objTerm->getStrField() != null ? " AND search_ix_content_field_name = ? " : "") . " AND search_ix_document_id = search_ix_content_document_id) "; $arrParameters[] = $objTerm->getStrText(); if ($objTerm->getStrField() != null) { $arrParameters[] = $objTerm->getStrField(); } } $strQuery .= $strWhereMust . ") a "; $arrMustShouldTerms = array(); /* @var $objTerm class_module_search_term */ foreach ($this->arrMustOccurs as $objTerm) { $strWhere = " (search_ix_content_content = ? "; $arrParameters[] = $objTerm->getStrText(); if ($objTerm->getStrField() != null) { $strWhere .= "AND search_ix_content_field_name = ? "; $arrParameters[] = $objTerm->getStrField(); } $strWhere .= ")"; $arrMustShouldTerms[] = $strWhere; } /* @var $objTerm class_module_search_term */ foreach ($this->arrShouldOccurs as $objTerm) { $strWhere = " (search_ix_content_content = ? "; $arrParameters[] = $objTerm->getStrText(); if ($objTerm->getStrField() != null) { $strWhere .= "AND search_ix_content_field_name = ? "; $arrParameters[] = $objTerm->getStrField(); } $strWhere .= ")"; $arrMustShouldTerms[] = $strWhere; } $strQuery .= "INNER JOIN (select search_ix_content_document_id, search_ix_content_score from " . _dbprefix_ . "search_ix_content where " . implode(" OR ", $arrMustShouldTerms) . ") z\r\n ON search_ix_document_id = search_ix_content_document_id"; }
/** * @param class_module_search_search $objSearch * * @return class_module_search_metadata_filter */ private function getMetadataFilterFromSearch($objSearch) { $objMetadataFilter = new class_module_search_metadata_filter(); $objMetadataFilter->setFilterModules($objSearch->getFilterModules()); $objMetadataFilter->setFilterUser($objSearch->getFilterUser()); $objMetadataFilter->setFilterChangeStartDate($objSearch->getObjChangeStartdate()); $objMetadataFilter->setFilterChangeEndDate($objSearch->getObjChangeEnddate()); $objMetadataFilter->setBitPortalSearch($objSearch->getBitPortalObjectFilter()); $objMetadataFilter->setStrPortalLang($objSearch->getStrPortalLangFilter()); return $objMetadataFilter; }
public function testClassFilter() { //simple module filter $objSearchTerm = new class_module_search_term("blub"); $objSearchQuery = new class_module_search_term_query($objSearchTerm); $objMetadataFilter = new class_module_search_metadata_filter(); $objMetadataFilter->setArrFilterClasses(array("class_module_system_setting")); $objSearchQuery->setMetadataFilter($objMetadataFilter); $arrResults = $this->getResultsFromQuery($objSearchQuery); $this->assertEquals(count($arrResults), 0); $objMetadataFilter = new class_module_search_metadata_filter(); $objMetadataFilter->setArrFilterClasses(array("class_module_system_aspect")); $objSearchQuery->setMetadataFilter($objMetadataFilter); $arrResults = $this->getResultsFromQuery($objSearchQuery); $this->assertEquals(count($arrResults), 1); }