public function search($keywords, $charset = 'utf-8') { $index = new Zend_Search_Lucene(ZY_ROOT . '/index'); $query = Zend_Search_Lucene_Search_QueryParser::parse($keywords, $charset); $hits = $index->find($query); return $hits; }
public static function searchLuceneWithValues(Doctrine_Table $table, $luceneQueryString, $culture = null) { // Ugh: UTF8 Lucene is case sensitive work around this if (function_exists('mb_strtolower')) { $luceneQueryString = mb_strtolower($luceneQueryString); } else { $luceneQueryString = strtolower($luceneQueryString); } // We have to register the autoloader before we can use these classes self::registerZend(); $luceneQuery = Zend_Search_Lucene_Search_QueryParser::parse($luceneQueryString); $query = new Zend_Search_Lucene_Search_Query_Boolean(); $query->addSubquery($luceneQuery, true); if (!is_null($culture)) { $culture = self::normalizeCulture($culture); $cultureTerm = new Zend_Search_Lucene_Index_Term($culture, 'culture'); // Oops, this said $aTerm before. Thanks to Quentin Dugauthier $cultureQuery = new Zend_Search_Lucene_Search_Query_Term($cultureTerm); $query->addSubquery($cultureQuery, true); } $index = $table->getLuceneIndex(); $hits = $index->find($query); $ids = array(); foreach ($hits as $hit) { $ids[$hit->primarykey] = $hit; } return $ids; }
/** * Creates a new ZendLucene handler connection * * @param string $location */ public function __construct($location) { /** * We're using realpath here because Zend_Search_Lucene does not do * that itself. It can cause issues because their destructor uses the * same filename but the cwd could have been changed. */ $location = realpath($location); /* If the $location doesn't exist, ZSL throws a *generic* exception. We * don't care here though and just always assume it is because the * index does not exist. If it doesn't exist, we create it. */ try { $this->connection = Zend_Search_Lucene::open($location); } catch (Zend_Search_Lucene_Exception $e) { $this->connection = Zend_Search_Lucene::create($location); } $this->inTransaction = 0; if (!$this->connection) { throw new ezcSearchCanNotConnectException('zendlucene', $location); } // Set proper default encoding for query parser Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8'); Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive()); }
/** * Method to perform a search. This function returns results from Zend_Lucene_Search * and is unpolished as it doesn't check permission issues, etc. * * @access private * @param string $text Text to search for * @param string $module Module to search items for * @param string $context Context in which to search * @param array $extra Any additional items * @return object */ private function search($text, $module = NULL, $context = NULL, $extra = array()) { $objIndexData = $this->getObject('indexdata'); $indexer = $objIndexData->checkIndexPath(); // Some cllean up till we can find a better way $phrase = trim(str_replace(':', ' ', $text)); $phrase = trim(str_replace('+', ' ', $phrase)); $phrase = trim(str_replace('-', ' ', $phrase)); if ($module != NULL) { if ($text != '') { $phrase .= ' AND '; } $phrase .= ' module:' . $module . ' '; } if ($context != NULL) { if ($phrase != '') { $phrase .= ' AND '; } $phrase .= ' context:' . $context . ' '; } if (is_array($extra) && count($extra) > 0) { foreach ($extra as $item => $value) { if ($phrase != '') { $phrase .= ' AND '; } $phrase .= $item . ':' . $value . ' '; } } //echo $phrase; $query = Zend_Search_Lucene_Search_QueryParser::parse($phrase); return $indexer->find($query); }
/** * Parses a query string * * @param string $strQuery * @param string $encoding * @return Zend_Search_Lucene_Search_Query * @throws Zend_Search_Lucene_Search_QueryParserException */ public static function parse($strQuery, $encoding = null) { self::_getInstance(); // Reset FSM if previous parse operation didn't return it into a correct state self::$_instance->reset(); require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; try { self::$_instance->_encoding = ($encoding !== null) ? $encoding : self::$_instance->_defaultEncoding; self::$_instance->_lastToken = null; self::$_instance->_context = new Zend_Search_Lucene_Search_QueryParserContext(self::$_instance->_encoding); self::$_instance->_contextStack = array(); self::$_instance->_tokens = self::$_instance->_lexer->tokenize($strQuery, self::$_instance->_encoding); // Empty query if (count(self::$_instance->_tokens) == 0) { return new Zend_Search_Lucene_Search_Query_Insignificant(); } foreach (self::$_instance->_tokens as $token) { try { self::$_instance->_currentToken = $token; self::$_instance->process($token->type); self::$_instance->_lastToken = $token; } catch (Exception $e) { if (strpos($e->getMessage(), 'There is no any rule for') !== false) { throw new Zend_Search_Lucene_Search_QueryParserException( 'Syntax error at char position ' . $token->position . '.' ); } throw $e; } } if (count(self::$_instance->_contextStack) != 0) { throw new Zend_Search_Lucene_Search_QueryParserException('Syntax Error: mismatched parentheses, every opening must have closing.' ); } return self::$_instance->_context->getQuery(); } catch (Zend_Search_Lucene_Search_QueryParserException $e) { if (self::$_instance->_suppressQueryParsingExceptions) { $queryTokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($strQuery, self::$_instance->_encoding); $query = new Zend_Search_Lucene_Search_Query_MultiTerm(); $termsSign = (self::$_instance->_defaultOperator == self::B_AND) ? true /* required term */ : null /* optional term */; foreach ($queryTokens as $token) { $query->addTerm(new Zend_Search_Lucene_Index_Term($token->getTermText()), $termsSign); } return $query; } else { throw $e; } } }
public function __construct() { Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8'); //set default encoding Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_CJK()); //set default Analyzer }
/** * Parses a query string * * @param string $strQuery * @param string $encoding * @return Zend_Search_Lucene_Search_Query * @throws Zend_Search_Lucene_Search_QueryParserException */ public static function parse($strQuery, $encoding = null) { if (self::$_instance === null) { self::$_instance = new Zend_Search_Lucene_Search_QueryParser(); } self::$_instance->_encoding = $encoding !== null ? $encoding : self::$_instance->_defaultEncoding; self::$_instance->_lastToken = null; self::$_instance->_context = new Zend_Search_Lucene_Search_QueryParserContext(self::$_instance->_encoding); self::$_instance->_contextStack = array(); self::$_instance->_tokens = self::$_instance->_lexer->tokenize($strQuery, self::$_instance->_encoding); // Empty query if (count(self::$_instance->_tokens) == 0) { return new Zend_Search_Lucene_Search_Query_Empty(); } foreach (self::$_instance->_tokens as $token) { try { self::$_instance->_currentToken = $token; self::$_instance->process($token->type); self::$_instance->_lastToken = $token; } catch (Exception $e) { if (strpos($e->getMessage(), 'There is no any rule for') !== false) { throw new Zend_Search_Lucene_Search_QueryParserException('Syntax error at char position ' . $token->position . '.'); } throw $e; } } if (count(self::$_instance->_contextStack) != 0) { throw new Zend_Search_Lucene_Search_QueryParserException('Syntax Error: mismatched parentheses, every opening must have closing.'); } return self::$_instance->_context->getQuery(); }
protected function useSearchIndex($slug) { if (!dmConfig::get('smart_404')) { return false; } try { $searchIndex = $this->serviceContainer->get('search_engine')->getCurrentIndex(); $queryString = str_replace('/', ' ', dmString::unSlugify($slug)); $query = Zend_Search_Lucene_Search_QueryParser::parse($queryString); $results = $searchIndex->search($query); $foundPage = null; foreach ($results as $result) { if ($result->getScore() > 0.5) { if ($foundPage = $result->getPage()) { break; } } else { break; } } if ($foundPage) { return $this->serviceContainer->getService('helper')->link($foundPage)->getHref(); } } catch (Exception $e) { $this->dispatcher->notify(new sfEvent($this, 'application.log', array('Can not use search index to find redirection for slug ' . $slug, sfLogger::ERR))); if (sfConfig::get('dm_debug')) { throw $e; } } }
public function index($msg = NULL) { $results = NULL; $results2 = NULL; $query = NULL; $view = new View('search_example'); $view->bind("results", $results)->bind("results2", $results2)->bind("query", $query)->bind("msg", $msg); if (!empty($_GET["q"])) { try { $query = $_GET["q"]; $form = $_GET["form"]; if ($form == "artists") { $results = Search::instance()->find($query); } else { Search::instance()->load_search_libs(); $query = Zend_Search_Lucene_Search_QueryParser::parse($query); $hits = Search::instance()->find($query); if (sizeof($hits) > 0) { $results2 = $query->highlightMatches(iconv('UTF-8', 'ASCII//TRANSLIT', $hits[0]->body)); } else { $results2 = '<p style="color:#f00">No results found</p>'; } } } catch (Exception $e) { Kohana::log("error", $e); } } $view->render(TRUE); }
/** * Adds a string that is parsed into Zend API queries * @param string $query The query to parse * @param string $encoding The encoding to parse query as * * @return sfLuceneCriteria */ public function addString($query, $encoding = null, $type = true) { $this->search->configure(); // setup query parser $this->add(Zend_Search_Lucene_Search_QueryParser::parse($query, $encoding), $type); return $this; }
public function actionIndex() { $this->webpageType = 'SearchResultsPage'; $type = ''; if (isset($_GET['type'])) { $type = $_GET['type']; } if (isset($_GET['q'])) { // $originalQuery = $_GET['q']; $queryString = $originalQuery = isset($_GET['q']) ? $_GET['q'] : ''; $index = new Zend_Search_Lucene($this->_indexFile); //only look for queryString in title and content, well if advanced search techniques aren't used if (!(strpos(strtolower($queryString), 'and') || strpos(strtolower($queryString), 'or') || strpos(strtolower($queryString), ':'))) { $queryString = "title:{$queryString} OR content:{$queryString}"; } if ($type) { $queryString .= ' AND type:' . $type; } $results = $index->find($queryString); $query = Zend_Search_Lucene_Search_QueryParser::parse($queryString); $this->render('index', compact('results', 'originalQuery', 'query', 'type')); } else { $this->render('advanced', array('type' => $type)); } }
/** * Returns Zend_Search_Lucene instance for given subroot * * every subroot has it's own instance * * @param Kwf_Component_Data for this index * @return Zend_Search_Lucene_Interface */ public static function getInstance(Kwf_Component_Data $subroot) { while ($subroot) { if (Kwc_Abstract::getFlag($subroot->componentClass, 'subroot')) { break; } $subroot = $subroot->parent; } if (!$subroot) { $subroot = Kwf_Component_Data_Root::getInstance(); } static $instance = array(); if (!isset($instance[$subroot->componentId])) { $analyzer = new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive(); $analyzer->addFilter(new Zend_Search_Lucene_Analysis_TokenFilter_ShortWords(2)); //$stopWords = explode(' ', 'der dir das einer eine ein und oder doch ist sind an in vor nicht wir ihr sie es ich'); //$analyzer->addFilter(new Zend_Search_Lucene_Analysis_TokenFilter_StopWords($stopWords)); Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer); Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8'); Zend_Search_Lucene_Storage_Directory_Filesystem::setDefaultFilePermissions(0666); $path = 'cache/fulltext'; $path .= '/' . $subroot->componentId; try { $instance[$subroot->componentId] = Zend_Search_Lucene::open($path); } catch (Zend_Search_Lucene_Exception $e) { $instance[$subroot->componentId] = Zend_Search_Lucene::create($path); } } return $instance[$subroot->componentId]; }
/** * Process and render search results. Uses the Lucene_results.ss template to * render the form. * * @access public * @param array $data The raw request data submitted by user * @param Form $form The form instance that was submitted * @param SS_HTTPRequest $request Request generated for this action * @return String The rendered form, for inclusion into the page template. */ public function ZendSearchLuceneResults($data, $form, $request) { $querystring = $form->Fields()->dataFieldByName('Search')->dataValue(); $query = Zend_Search_Lucene_Search_QueryParser::parse($querystring); $hits = ZendSearchLuceneWrapper::find($query); $data = $this->getDataArrayFromHits($hits, $request); return $this->owner->customise($data)->renderWith(array('Lucene_results', 'Page')); }
public function searchTag($tag, $value) { if (!$this->_enabled) { return array(); } Zend_Search_Lucene::setDefaultSearchField($tag); $query = Zend_Search_Lucene_Search_QueryParser::parse($value); return $this->_index->find($query); }
private function search($terms) { Yii::import('application.vendor.*'); require_once 'Zend/Search/Lucene.php'; $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.index')); $result = $index->find($terms); $query = Zend_Search_Lucene_Search_QueryParser::parse($terms); return $result; }
public function __construct() { try { parent::__construct(new Zend_Search_Lucene(self::INDEX_DIR, false)); } catch (Zend_Search_Lucene_Exception $e) { parent::__construct(new Zend_Search_Lucene(self::INDEX_DIR, true)); } Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding("UTF-8"); }
public function __construct() { $this->_log()->info('Starting up'); if (@preg_match('/\\pL/u', 'a') != 1) { $this->_log()->err("PCRE unicode support is turned off.\n"); } Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding($this->_encoding); Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive()); }
// public function init(){ // Yii::import('application.vendors.*'); // require_once('Zend/Search/Lucene.php'); // parent::init(); // } public function actionSearch() { $this->layout = 'column2'; if (($term = Yii::app()->getRequest()->getParam('q', null)) !== null) { $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles));
public function emptyNotOperatorAction() { if (Zend_Search_Lucene_Search_QueryParser::getDefaultOperator() == Zend_Search_Lucene_Search_QueryParser::B_AND) { // Do nothing } else { $this->orOperatorAction(); } // Process NOT operator $this->notOperatorAction(); }
public function searchAction() { if ($this->_request->isPost() && Digitalus_Filter_Post::has('submitSearchForm')) { $index = Zend_Search_Lucene::open('./application/modules/search/data/index'); $queryString = Digitalus_Filter_Post::get('keywords'); $query = Zend_Search_Lucene_Search_QueryParser::parse($queryString); $this->view->searchResults = $index->find($query); $this->view->keywords = $queryString; } }
public function testQueryParser() { $queries = array('title:"The Right Way" AND text:go', 'title:"Do it right" AND right', 'title:Do it right', '"jakarta apache"~10', 'jakarta apache', 'jakarta^4 apache', '"jakarta apache"^4 "Apache Lucene"', '"jakarta apache" jakarta', '"jakarta apache" OR jakarta', '"jakarta apache" || jakarta', '"jakarta apache" AND "Apache Lucene"', '"jakarta apache" && "Apache Lucene"', '+jakarta apache', '"jakarta apache" AND NOT "Apache Lucene"', '"jakarta apache" && !"Apache Lucene"', 'NOT "jakarta apache"', '!"jakarta apache"', '"jakarta apache" -"Apache Lucene"', '(jakarta OR apache) AND website', '(jakarta || apache) && website', 'title:(+return +"pink panther")', 'title:(+re\\turn\\ value +"pink panther\\"" +body:cool)', '+type:1 +id:5', 'type:1 AND id:5', 'f1:word1 f1:word2 and f1:word3', 'f1:word1 not f1:word2 and f1:word3'); $rewritedQueries = array('+(title:"the right way") +(text:go)', '+(title:"do it right") +(path:right modified:right contents:right)', '(title:do) (path:it modified:it contents:it) (path:right modified:right contents:right)', '((path:"jakarta apache"~10) (modified:"jakarta apache"~10) (contents:"jakarta apache"~10))', '(path:jakarta modified:jakarta contents:jakarta) (path:apache modified:apache contents:apache)', '((path:jakarta modified:jakarta contents:jakarta)^4)^4 (path:apache modified:apache contents:apache)', '((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache"))^4 ((path:"apache lucene") (modified:"apache lucene") (contents:"apache lucene"))', '((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache")) (path:jakarta modified:jakarta contents:jakarta)', '((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache")) (path:jakarta modified:jakarta contents:jakarta)', '((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache")) (path:jakarta modified:jakarta contents:jakarta)', '+((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache")) +((path:"apache lucene") (modified:"apache lucene") (contents:"apache lucene"))', '+((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache")) +((path:"apache lucene") (modified:"apache lucene") (contents:"apache lucene"))', '+(path:jakarta modified:jakarta contents:jakarta) (path:apache modified:apache contents:apache)', '+((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache")) -((path:"apache lucene") (modified:"apache lucene") (contents:"apache lucene"))', '+((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache")) -((path:"apache lucene") (modified:"apache lucene") (contents:"apache lucene"))', '<EmptyQuery>', '<EmptyQuery>', '((path:"jakarta apache") (modified:"jakarta apache") (contents:"jakarta apache")) -((path:"apache lucene") (modified:"apache lucene") (contents:"apache lucene"))', '+((path:jakarta modified:jakarta contents:jakarta) (path:apache modified:apache contents:apache)) +(path:website modified:website contents:website)', '+((path:jakarta modified:jakarta contents:jakarta) (path:apache modified:apache contents:apache)) +(path:website modified:website contents:website)', '(+(title:return) +(title:"pink panther"))', '(+(+title:return +title:value) +(title:"pink panther") +(body:cool))', '+(<EmptyQuery>) +(<EmptyQuery>)', '+(<EmptyQuery>) +(<EmptyQuery>)', '(f1:word) (+(f1:word) +(f1:word))', '(f1:word) (-(f1:word) +(f1:word))'); $index = Zend_Search_Lucene::open(dirname(__FILE__) . '/_files/_indexSample'); foreach ($queries as $id => $queryString) { $query = Zend_Search_Lucene_Search_QueryParser::parse($queryString); $this->assertTrue($query instanceof Zend_Search_Lucene_Search_Query); $this->assertEquals($query->rewrite($index)->__toString(), $rewritedQueries[$id]); } }
function __construct($query) { $qstr = $query->__toString(); // query needs the object_type field removing for highlighting $qstr = preg_replace('/\\+?\\(\\(object_type.*?\\)\\)/', '', $qstr); // this is the only way i can find to remove a term form a query $query = Zend_Search_Lucene_Search_QueryParser::parse($qstr, 'UTF-8'); // rebuild $this->query = $query; $this->snippetHelper = new Search_ResultSet_SnippetHelper(); }
public function parse() { $data = $this->_data; $query = Zend_Search_Lucene_Search_QueryParser::parse($data['query']); if ('' != $data['pricefrom'] && '' != $data['priceto']) { $from = new Zend_Search_Lucene_Index_Term($this->_formatPrice($data['pricefrom']), 'price'); $to = new Zend_Search_Lucene_Index_Term($this->_formatPrice($data['priceto']), 'price'); $q = new Zend_Search_Lucene_Search_Query_Range($from, $to, true); $query = Zend_Search_Lucene_Search_QueryParser::parse($data['query'] . ' +' . $q); } return $query; }
public static function registerZend() { if (self::$zendLoaded) { return; } set_include_path(sfConfig::get('sf_lib_dir') . '/vendor' . PATH_SEPARATOR . get_include_path()); require_once sfConfig::get('sf_lib_dir') . '/vendor/Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8'); Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive()); self::$zendLoaded = true; }
public function actionSearch() { //working. $this->layout = 'column2'; if (($term = Yii::app()->getRequest()->getParam('q', null)) !== null) { Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive()); $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles)); $results = $index->find($term); $query = Zend_Search_Lucene_Search_QueryParser::parse($term); $this->render('search', compact('results', 'term', 'query')); } }
public static function renewIndex($forceCreate = false) { $pages = Application_Model_Mappers_PageMapper::getInstance()->getPagesForSearchIndex(); if (!is_array($pages)) { return false; } Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8'); Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive()); self::removeIndex() && self::initIndex(); array_walk($pages, array('Tools_Search_Tools', 'addPageToIndex')); self::$_index->optimize(); }
/** * php index.php docx search "Licence" * * @param $phrase * @return mixed|void */ public function search($phrase) { $index = self::open(APP_PATH . '/' . self::INDEX_DIR); echo sprintf("Keyword : %s\n\n", $phrase); $phrase = iconv('gbk', 'utf-8', $phrase); $phrase = Zend_Search_Lucene_Search_QueryParser::parse($phrase, "utf-8"); $results = $index->find($phrase); foreach ($results as $index => $hit) { echo sprintf("%s : %s - %s\n", $index, basename($hit->filename), $hit->score); } echo "\n###Done###\n"; }
public function indexAction() { if ($this->_request->isPost()) { $keywords = $this->_request->getParam('keywords'); $query = Zend_Search_Lucene_Search_QueryParser::parse($keywords); $index = Zend_Search_Lucene::open(APPLICATION_PATH . '/indexes'); $hits = $index->find($query); $this->view->results = $hits; $this->view->keywords = $keywords; } else { $this->view->results = null; } }
public function searchAction() { $query = $this->getRequest()->getParam('q'); if ($query) { $qo = Zend_Search_Lucene_Search_QueryParser::parse($query); $options = $this->getInvokeArg('bootstrap')->getOption('lucene'); $luceneDir = $options['dir']; $index = Zend_Search_Lucene::open($luceneDir); $results = $index->find($query); $this->view->matches = $results; $this->view->query = $qo; } }
public function actionSearch() { $indexFiles = Yii::app()->getModule('zendsearch')->indexFiles; SetLocale(LC_ALL, 'ru_RU.UTF-8'); Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive()); Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8'); if (($term = Yii::app()->getRequest()->getQuery('q', null)) !== null) { $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $indexFiles)); $results = $index->find($term); $query = Zend_Search_Lucene_Search_QueryParser::parse($term); $this->render('search', compact('results', 'term', 'query')); } }