public function testQueryParserExceptionsHandling() { $this->assertTrue(Search\QueryParser::queryParsingExceptionsSuppressed()); $query = Search\QueryParser::parse('contents:[business TO by}'); $this->assertEquals('contents business to by', $query->__toString()); Search\QueryParser::dontSuppressQueryParsingExceptions(); $this->assertFalse(Search\QueryParser::queryParsingExceptionsSuppressed()); try { $query = Search\QueryParser::parse('contents:[business TO by}'); $this->fail('exception wasn\'t raised while parsing a query'); } catch (Lucene\Exception\ExceptionInterface $e) { $this->assertEquals('Syntax error at char position 25.', $e->getMessage()); } Search\QueryParser::suppressQueryParsingExceptions(); $this->assertTrue(Search\QueryParser::queryParsingExceptionsSuppressed()); }
/** * @param string $keywords * @param string $language * * @return \stdClass[] */ protected function getCmsSearchResults($keywords, $language) { $searchModel = new SearchModel($this->cmsController->getDB()); $searchIndex = Lucene::open($this->cmsController->getCore()->getSiteRoot() . 'index' . DIRECTORY_SEPARATOR . $language); /*$query = new Boolean(); // new Fuzzy() $query->addSubquery(QueryParser::parse( $keywords ), true);*/ QueryParser::suppressQueryParsingExceptions(); $query = QueryParser::parse($keywords); //$hits = $searchIndex->find($query, 'score', SORT_NUMERIC, SORT_DESC); $hits = $searchIndex->find($query); //echo'<pre>'; var_dump(/*$hits, */$indexSize, $documents); $searchResultsArr = array(); $highlighter = new CmsSearchHighlighter($keywords); //$highlighter = new DefaultHighlighter(); foreach ($hits as $hit) { /** @var QueryHit $hit */ $searchResult = new \stdClass(); // Gibt Zend_Search_Lucene_Document Objekte für diesen Treffer zurück /** @var Document $document */ $document = $hit->getDocument(); $doc = $searchModel->getDocumentByID($document->getFieldUtf8Value('ID')); if ($doc->getID() === null) { continue; } $fldType = $doc->getType(); if ($fldType !== 'core_page') { $contentChunks = $highlighter->highlightMatches(strip_tags($doc->getDescription()), 'UTF-8'); if ($contentChunks == '') { $contentChunks = null; } // Gibt ein Zend_Search_Lucene_Field Objekt von // Zend_Search_Lucene_Document zurück $searchResult->title = $highlighter->highlightMatches(strip_tags($doc->getTitle()), 'UTF-8'); $searchResult->description = $contentChunks; $searchResult->url = $doc->getPath(); if (isset($searchResultsArr[$fldType]) === false) { $stmntModName = $this->cmsController->getDB()->prepare("\n\t\t\t\t\t\tSELECT manifest_content FROM cms_mod_available WHERE name = ?\n\t\t\t\t\t"); $resModName = $this->cmsController->getDB()->select($stmntModName, array($fldType)); $displayName = $fldType; try { $manifestObj = JsonUtils::decode($resModName[0]->manifest_content); if (isset($manifestObj->name->{$language})) { $displayName = $manifestObj->name->{$language}; } elseif (isset($manifestObj->name->en)) { $displayName = $manifestObj->name->en; } } catch (\Exception $e) { } $searchResultsArr[$fldType] = new \stdClass(); $searchResultsArr[$fldType]->title = $displayName; $searchResultsArr[$fldType]->results = array(); } $searchResultsArr[$doc->getType()]->results[] = $searchResult; } else { $contentChunks = $this->createChunkedHighlighting($highlighter->highlightMatches(strip_tags($doc->getDescription()), 'UTF-8')); if ($contentChunks == '') { $contentChunks = null; } // Gibt ein Zend_Search_Lucene_Field Objekt von // Zend_Search_Lucene_Document zurück $searchResult->title = $highlighter->highlightMatches(strip_tags($doc->getTitle()), 'UTF-8'); $searchResult->description = $contentChunks; $searchResult->url = $doc->getPath(); if (isset($searchResultsArr[$fldType]) === false) { $searchResultsArr[$fldType] = new \stdClass(); $searchResultsArr[$fldType]->title = 'Andere Suchresultate'; $searchResultsArr[$fldType]->results = array(); } $searchResultsArr[$doc->getType()]->results[] = $searchResult; } } return $searchResultsArr; }