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);
 }