| 
<?php 
/**
 * IFile framework
 *
 * @category   IndexingFile
 * @package    ifile.example
 * @author        Giampaolo Losito, Antonio Di Girolomo
 * @copyright  2011-2013 isApp.it (www.isapp.it)
 * @license    GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999
 * @version    1.2.1
 *
 */
 
 /**
 * This script is a example how to search a grop of terms in boolean method with MySqli Interface
 *
 * IMPORTANT:
 * For MySql is important define in the configuration (IFileConfig.xml)
 * Define Table name that IFile must used
 * The fields: name, path, filename as "Text":
 *
 <table-name collation="utf8_general_ci">ifile_index_table</table-name>
 ...
 <zend-document>
 <fields>
 <field name="name" type="Text" />
 <field name="path" type="Text" />
 <field name="filename" type="Text" />
 </fields>
 </zend-document>
 */
 
 error_reporting(E_ALL);
 /** require IFileFactory */
 require_once '../IFileFactory.php';
 
 // Create connection at MySql
 // IFile works only with MySqli Interfaceù
 // First to test, you must create "example_ifile_index" DB in the your MySql
 $connection = @new mysqli('localhost', 'root', '', 'example_ifile_index', 3306);
 if (mysqli_connect_error()) {die(" - ".mysqli_connect_error()." - ");}
 
 // try/catch
 try {
 // instance IFileFactory
 $IFileFactory = IFileFactory::getInstance();
 // define mysqli interface
 $ifile = $IFileFactory->getIFileIndexing('mysqli', $connection);
 
 // TEST Query Boolean
 // For Boolean Search IFile use IFileQueryRegistry
 
 // Case 1. Search term present in first group AND present or not present in second group
 // First group
 $ifileQueryRegistry_01 = new IFileQueryRegistry();
 $ifileQueryRegistry_01->setQuery('prova', 'body', IFileQuery::MATCH_REQUIRED);
 $ifileQueryRegistry_01->setQuery('txt', 'body', IFileQuery::MATCH_REQUIRED);
 // Second group
 $ifileQueryRegistry_02 = new IFileQueryRegistry();
 $ifileQueryRegistry_02->setQuery('doc', 'body', IFileQuery::MATCH_REQUIRED);
 // Setting query
 $ifileQueryRegistry =  new IFileQueryRegistry();
 $ifileQueryRegistry->setQuery($ifileQueryRegistry_01, null, IFileQuery::MATCH_REQUIRED);
 $ifileQueryRegistry->setQuery($ifileQueryRegistry_02, null, IFileQuery::MATCH_OPTIONAL);
 // define order
 $ifile->setSort('key', SORT_STRING, SORT_DESC);
 // call Boolean method
 $result = $ifile->queryBoolean($ifileQueryRegistry);
 // print result
 printResult("Case 1: ", $result);
 
 // Case 2. Search term present or in first group OR in second group
 // First group
 $ifileQueryRegistry_01 = new IFileQueryRegistry();
 $ifileQueryRegistry_01->setQuery('prova', 'body', IFileQuery::MATCH_REQUIRED);
 $ifileQueryRegistry_01->setQuery('txt', 'body', IFileQuery::MATCH_REQUIRED);
 // Second gruppo
 $ifileQueryRegistry_02 = new IFileQueryRegistry();
 $ifileQueryRegistry_02->setQuery('doc', 'body', IFileQuery::MATCH_REQUIRED);
 // Setting query
 $ifileQueryRegistry =  new IFileQueryRegistry();
 $ifileQueryRegistry->setQuery($ifileQueryRegistry_01, null, IFileQuery::MATCH_OPTIONAL);
 $ifileQueryRegistry->setQuery($ifileQueryRegistry_02, null, IFileQuery::MATCH_OPTIONAL);
 // define order
 $ifile->setSort('key', SORT_STRING, SORT_DESC);
 // call Boolean method
 $result = $ifile->queryBoolean($ifileQueryRegistry);
 // print result
 printResult("Case 2: ", $result);
 
 
 // Case 3. Search all term present in first group AND NOT present in second group
 // First group
 $ifileQueryRegistry_01 = new IFileQueryRegistry();
 $ifileQueryRegistry_01->setQuery('prova', 'body', IFileQuery::MATCH_REQUIRED);
 $ifileQueryRegistry_01->setQuery('txt', 'body', IFileQuery::MATCH_REQUIRED);
 // Second group
 $ifileQueryRegistry_02 = new IFileQueryRegistry();
 $ifileQueryRegistry_02->setQuery('doc', 'body', IFileQuery::MATCH_REQUIRED);
 // Setting query
 $ifileQueryRegistry =  new IFileQueryRegistry();
 $ifileQueryRegistry->setQuery($ifileQueryRegistry_01, null, IFileQuery::MATCH_REQUIRED);
 $ifileQueryRegistry->setQuery($ifileQueryRegistry_02, null, IFileQuery::MATCH_PROHIBITEN);
 // define order
 $ifile->setSort('key', SORT_STRING, SORT_DESC);
 // call Boolean method
 $result = $ifile->queryBoolean($ifileQueryRegistry);
 // print result
 printResult("Case 3: ", $result);
 
 // Case 4. Search term (optional) present in first group AND NOT present in second group
 // Second group
 $ifileQueryRegistry_01 = new IFileQueryRegistry();
 $ifileQueryRegistry_01->setQuery('prova', 'body', IFileQuery::MATCH_REQUIRED);
 $ifileQueryRegistry_01->setQuery('txt', 'body', IFileQuery::MATCH_REQUIRED);
 // Second group
 $ifileQueryRegistry_02 = new IFileQueryRegistry();
 $ifileQueryRegistry_02->setQuery('doc', 'body', IFileQuery::MATCH_REQUIRED);
 // Setting query
 $ifileQueryRegistry =  new IFileQueryRegistry();
 $ifileQueryRegistry->setQuery($ifileQueryRegistry_01, null, IFileQuery::MATCH_OPTIONAL);
 $ifileQueryRegistry->setQuery($ifileQueryRegistry_02, null, IFileQuery::MATCH_PROHIBITEN);
 // define order
 $ifile->setSort('key', SORT_STRING, SORT_DESC);
 // call Boolean method
 $result = $ifile->queryBoolean($ifileQueryRegistry);
 // print result
 printResult("Case 4: ", $result);
 
 } catch (Exception $e) {
 echo "Error: ".$e->getMessage();
 }
 
 /**
 * Function of utility. Used only for this example.
 * Print result of search
 *
 * @param strint $type
 * @param array $result_T
 * @return
 */
 function printResult($type, $result) {
 
 echo "Type of search: ".$type;
 if(!empty($result) && is_array($result)) {
 echo "<br>Result Search:<br>";
 foreach ($result as $hit) {
 $doc = $hit->getDocument();
 echo "File: ".$doc->name." - Chiave: ".$doc->key." - Score: ".$hit->score."<br>";
 }
 }  else {
 echo "<br>Not result returned<br>";
 }
 
 echo "End print for: ($type)<br><br>";
 }
 ?>
 |