diff --git a/lib/Doctrine/Search.php b/lib/Doctrine/Search.php index 6365f90e5..cfd04dbab 100644 --- a/lib/Doctrine/Search.php +++ b/lib/Doctrine/Search.php @@ -88,6 +88,13 @@ class Doctrine_Search } public function buildDefinition(Doctrine_Table $table) { + $name = $table->getComponentName(); + + $className = $name . 'Index'; + + if (class_exists($className)) { + return false; + } $columns = array('keyword' => array('type' => 'string', 'length' => 200, @@ -99,9 +106,8 @@ class Doctrine_Search 'length' => 8)); $id = $table->getIdentifier(); - $name = $table->getComponentName(); - $options = array('className' => $name . 'Index'); + $options = array('className' => $className); $fk = array(); @@ -134,5 +140,6 @@ class Doctrine_Search if ( ! $this->_options['generateFiles']) { eval($def); } + return true; } } diff --git a/lib/Doctrine/Search/Analyzer/Standard.php b/lib/Doctrine/Search/Analyzer/Standard.php index b3e33fb13..8e2cdda1a 100644 --- a/lib/Doctrine/Search/Analyzer/Standard.php +++ b/lib/Doctrine/Search/Analyzer/Standard.php @@ -266,7 +266,7 @@ class Doctrine_Search_Analyzer_Standard implements Doctrine_Search_Analyzer_Inte public function analyze($text) { - $text = preg_replace('/[.()&#!,]/', ' ', $text); + $text = preg_replace('/[.()&#!,?^£@%&{}+]/', ' ', $text); $text = str_replace(' ', ' ', $text); $terms = explode(' ', $text); diff --git a/lib/Doctrine/Search/Query.php b/lib/Doctrine/Search/Query.php new file mode 100644 index 000000000..1fef6114e --- /dev/null +++ b/lib/Doctrine/Search/Query.php @@ -0,0 +1,96 @@ +. + */ + +/** + * Doctrine_Search_Query + * + * @package Doctrine + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision: 1939 $ + * @author Konsta Vesterinen + */ +class Doctrine_Search_Query +{ + /** + * @var Doctrine_Query $query the base query + */ + protected $_query; + /** + * @var array $_aliases an array of searchable component aliases + */ + protected $_aliases = array(); + /** + * @param Doctrine_Query $query the base query + */ + public function __construct($query) + { + if (is_string($query)) { + $this->_query = new Doctrine_Query(); + $this->_query->parseQuery($query); + } elseif ($query instanceof Doctrine_Query) { + $this->_query = $query; + } else { + throw new Doctrine_Exception('Constructor argument should be either Doctrine_Query object or a valid DQL query string'); + } + + $this->_query->getQuery(); + } + /** + * getQuery + * + * @return Doctrine_Query returns the query object associated with this object + */ + public function getQuery() + { + return $this->_query; + } + + public function addAlias($alias) + { + $this->_aliases[] = $alias; + } + + public function search($text) + { + $text = strtolower($text); + + $terms = Doctrine_Tokenizer::quoteExplode($text); + + foreach ($this->_aliases as $alias) { + $a = array(); + + foreach ($terms as $term) { + $a[] = 'i.keyword = ?'; + } + $this->_query->addWhere(implode(' OR ', $a), $terms); + } + } + + public function execute() + { + $resultSet = $this->_query->execute(); + + return $resultSet; + } +} diff --git a/lib/Doctrine/Search/Scorer.php b/lib/Doctrine/Search/Scorer.php new file mode 100644 index 000000000..431ead8f0 --- /dev/null +++ b/lib/Doctrine/Search/Scorer.php @@ -0,0 +1,66 @@ +. + */ + +/** + * Doctrine_Search_Scorer + * + * @author Konsta Vesterinen + * @package Doctrine + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version $Revision$ + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + */ +class Doctrine_Search_Scorer +{ + + protected $_resultSet; + + protected $_components = array(); + + public function __construct($resultSet) + { + $this->_resultSet = $resultSet; + } + + public function addComponent($component) + { + $this->_components[] = $component; + } + + public function process() + { + foreach ($this->_resultSet as $mainRow) { + if (isset($mainRow[$component])) { + if ( ! is_array($mainRow[$component])) { + throw new Doctrine_Search_Exception('Wrong data type in result set.'); + } + + foreach ($mainRow[$component] as $indexRow) { + + } + } + } + } + + +}