LidaaSearchBundle is a project mainly written in PHP, it's free.
Zend_Search in Symfony2
Provides advance search capability to Symfony2 projects.
Requires Zend 2.x Zend/Search/Lucene You can get it here http://github.com/zendframework/zf2
Add SearchBundle to your application kernel:
// app/AppKernel.php
public function registerBundles()
{
return array(
// ...
new Lidaa\SearchBundle\LidaaSearchBundle(),
// ...
);
}
Add the 'Lidaa' namespace to your autoloader:
// app/autoload.php
$loader->registerNamespaces(array(
//...
'Lidaa' => __DIR__.'/../vendor/bundles',
//...
));
Here is a yaml example
# Search Configuration
lidaa_search:
analyzer: Zend\Search\Lucene\Analysis\Analyzer\Common\Text\CaseInsensitive
path: %kernel.root_dir%/cache/%kernel.environment%/lucene/index
doc_type: DOC # { DOC, HTML, PPT, DOCX, ...}
To add to the search:
$lucene_search = $this->get('lucene.search');
$index = $lucene_search->getIndex();
$articlesData = array
(
0 => array(
"url" => "http://ganeshhs.com/url-1",
"title" => "Google suggest : pick right search keyword",
"contents" => "Picking the right keywords for the websites is the success of search engine marketing ...",
"category" => "Google",
"postedDateTime" => "2007-12-26 12:20:00",
"articleId" => 1),
1 => array(
"url" => "http://ganeshhs.com/url-2",
"title" => "zend framework tutorial | part 9 Zend Auth",
"contents" => "Zend Auth is easy to set up and provides a system that secures our site with an ...",
"category" => "zend-framework",
"postedDateTime" => "2007-12-26 12:20:00",
"articleId" => 2)
);
foreach($articlesData as $articleData)
{
$doc = $lucene_search->getDocument();
$doc->addField($lucene_search->getField('Keyword', array('url', $articleData["url"])));
$doc->addField($lucene_search->getField('UnIndexed', array('articleId', $articleData["articleId"])));
$doc->addField($lucene_search->getField('UnIndexed', array('postedDateTime', $articleData["postedDateTime"])));
$doc->addField($lucene_search->getField('Text', array('title', $articleData["title"])));
$doc->addField($lucene_search->getField('UnStored', array('contents', $articleData["contents"])));
$doc->addField($lucene_search->getField('Text', array('category', $articleData["category"])));
$index->addDocument($doc);
}
$index->commit();
To retrieve a query:
$query = 'zend';
$results = $index->find($query);
if(empty($results)){
echo 'empty';
}else{
foreach($results as $result){
echo $result->url;
}
}
See the Zend documentation for more information.
- Incorporate the possibility of changing the type of document
- Activate the "analyzer"