add doublemetaphone function and config to enable-disable usage of double metaphone

This commit is contained in:
Julien Fastré 2013-12-01 22:53:37 +01:00
parent 82f1aeee19
commit 44d8236f21
3 changed files with 32 additions and 6 deletions

View File

@ -101,14 +101,25 @@ class PersonController extends Controller {
$offset = $this->getRequest()->query->getInt('offet', 0); $offset = $this->getRequest()->query->getInt('offet', 0);
$limit = $this->getRequest()->query->getInt('limit', 30); $limit = $this->getRequest()->query->getInt('limit', 30);
$persons = $em->createQuery('SELECT p FROM CLChillPersonBundle:Person p' $dql = 'SELECT p FROM CLChillPersonBundle:Person p'
. ' WHERE LOWER(p.name) like LOWER(:q) OR LOWER(p.surname) ' . ' WHERE'
. ' like LOWER(:q) ') . ' LOWER(p.name) like LOWER(:q)'
->setParameter('q', '%'.$q.'%') . ' OR LOWER(p.surname) like LOWER(:q)';
if ($this->container->getParameter('cl_chill_person.search.use_double_metaphone')) {
$dql .= ' OR DOUBLEMETAPHONE(p.name) = DOUBLEMETAPHONE(:qabsolute)';
}
$query = $em->createQuery($dql)
->setParameter('q', '%'.$q.'%');
if ($this->container->getParameter('cl_chill_person.search.use_double_metaphone')) {
$query->setParameter('qabsolute', $q);
}
// ->setOffset($offset) // ->setOffset($offset)
// ->setLimit($limit) // ->setLimit($limit)
->getResult() $persons = $query->getResult() ;
;
if (count($persons) === 0 ){ if (count($persons) === 0 ){

View File

@ -22,6 +22,9 @@ class CLChillPersonExtension extends Extension
$configuration = new Configuration(); $configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs); $config = $this->processConfiguration($configuration, $configs);
$container->setParameter('cl_chill_person.search.use_double_metaphone',
$config['search']['use_double_metaphone']);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml'); $loader->load('services.yml');
} }

View File

@ -20,6 +20,18 @@ class Configuration implements ConfigurationInterface
$treeBuilder = new TreeBuilder(); $treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('cl_chill_person'); $rootNode = $treeBuilder->root('cl_chill_person');
$rootNode
->canBeDisabled()
->children()
->arrayNode('search')
->canBeDisabled()
->children()
->booleanNode('use_double_metaphone')
->defaultFalse()
->end()
->booleanNode('use_trigrams')->defaultFalse()->end();
// Here you should define the parameters that are allowed to // Here you should define the parameters that are allowed to
// configure your bundle. See the documentation linked above for // configure your bundle. See the documentation linked above for
// more information on that topic. // more information on that topic.