Contenido API - Search Object

This object starts a indexed fulltext search

TODO: The way to set the search options could be done much more better! The computation of the set of searchable articles should not be treated in this class. It is better to compute the array of searchable articles from the outside and to pass the array of searchable articles as parameter. Avoid foreach loops.

Use object with

$options = array('db' => 'regexp', // use db function regexp 'combine' => 'or'); // combine searchwords with or

The range of searchable articles is by default the complete content which is online and not protected.

With option 'searchable_articles' you can define your own set of searchable articles. If parameter 'searchable_articles' is set the options 'cat_tree', 'categories', 'articles', 'exclude', 'artspecs', 'protected', 'dontshowofflinearticles' don't have any effect.

$options = array('db' => 'regexp', // use db function regexp 'combine' => 'or', // combine searchwords with or 'searchable_articles' => array(5, 6, 9, 13));

One can define the range of searchable articles by setting the parameter 'exclude' to false which means the range of categories defined by parameter 'cat_tree' or 'categories' and the range of articles defined by parameter 'articles' is included.

$options = array('db' => 'regexp', // use db function regexp 'combine' => 'or', // combine searchwords with or 'exclude' => false, // => searchrange specified in 'cat_tree', 'categories' and 'articles' is included 'cat_tree' => array(12), // tree with root 12 included 'categories' => array(100,111), // categories 100, 111 included 'articles' => array(33), // article 33 included 'artspecs' => array(2, 3), // array of article specifications => search only articles with these artspecs 'res_per_page' => 2, // results per page 'protected' => true); // => do not search articles or articles in categories which are offline or protected 'dontshowofflinearticles' => false); // => search offline articles or articles in categories which are offline

You can build the complement of the range of searchable articles by setting the parameter 'exclude' to true which means the range of categories defined by parameter 'cat_tree' or 'categories' and the range of articles defined by parameter 'articles' is excluded from search.

$options = array('db' => 'regexp', // use db function regexp 'combine' => 'or', // combine searchwords with or 'exclude' => true, // => searchrange specified in 'cat_tree', 'categories' and 'articles' is excluded 'cat_tree' => array(12), // tree with root 12 excluded 'categories' => array(100,111), // categories 100, 111 excluded 'articles' => array(33), // article 33 excluded 'artspecs' => array(2, 3), // array of article specifications => search only articles with these artspecs 'res_per_page' => 2, // results per page 'protected' => true); // => do not search articles or articles in categories which are offline or protected 'dontshowofflinearticles' => false); // => search offline articles or articles in categories which are offline

$search = new Search($options);

$cms_options = array("htmlhead", "html", "head", "text", "imgdescr", "link", "linkdescr"); search only in these cms-types $search->setCmsOptions($cms_options);

$search_result = $search->searchIndex($searchword, $searchwordex); // start search

The search result structure has following form Array ( [20] => Array ( [CMS_HTML] => Array ( [0] => 1 [1] => 1 [2] => 1 ) [keyword] => Array ( [0] => content [1] => contenido [2] => wwwcontenidoorg ) [search] => Array ( [0] => con [1] => con [2] => con ) [occurence] => Array ( [0] => 1 [1] => 5 [2] => 1 ) [similarity] => 60 ) )

The keys of the array are the article ID's found by search.

Searching 'con' matches keywords 'content', 'contenido' and 'wwwcontenidoorg' in article with ID 20 in content type CMS_HTML[1]. The search term occurs 7 times. The maximum similarity between searchterm and matching keyword is 60%.

with $oSearchResults = new SearchResult($search_result, 10); one can rank and display the results

version 1.0.1
author Willi Man
copyright four for business AG <www.4fb.de>

 Methods

Add all article specifications matching name of article specification (client dependent but language independent)

addArticleSpecificationsByName(string $sArtSpecName) : void

Parameters

$sArtSpecName

string

Fetch all article specifications which are online,

getArticleSpecifications() : array

Returns

arrayArray of article specification Ids

Returns list of searchable article ids.

getSearchableArticles(array $search_range) : array

Parameters

$search_range

array

Returns

arrayArticles in specified search range

Returns the category tree array.

getSubTree(int $cat_start) : array

todo This is not the job for search, should be oursourced...

Parameters

$cat_start

int

Root of a category tree

Returns

arrayCategory Tree

indexed fulltext search

searchIndex(string $searchwords, string $searchwords_exclude) : void

Parameters

$searchwords

string

The search words

$searchwords_exclude

string

The words, which should be excluded from search

Set article specification

setArticleSpecification(int $iArtspecID) : void

Parameters

$iArtspecID

int

setCmsOptions()

setCmsOptions(\$cms_options $cms_options) : void

Parameters

$cms_options

\$cms_options

The cms-types (htmlhead, html, ...) which should explicitly be searched

Setter for debug

setDebug(bool $bDebug) 
Inherited

inherited_from \SearchBaseAbstract::setDebug()

Parameters

$bDebug

bool

stripWords()

stripWords(\$searchwords $searchwords) : Array

Parameters

$searchwords

\$searchwords

The search-words

Returns

Arrayof stripped search-words

Initialises some properties

__construct(\DB_Contenido $oDB, bool $bDebug) 
Inherited

inherited_from \SearchBaseAbstract::__construct()

Parameters

$oDB

\DB_Contenido

Optional database instance

$bDebug

bool

Optional, flag to enable debugging

Main debug function, prints dumps parameter if debugging is enabled

_debug(string $msg, mixed $var) 
Inherited

inherited_from \SearchBaseAbstract::_debug()

Parameters

$msg

string

Some text

$var

mixed

The variable to dump

 Properties

 

article specifications

$article_specs : array

 

array of available cms types

$cms_type : array

 

suffix of available cms types

$cms_type_suffix : array

 

If $dontshowofflinearticles = false => search offline articles or articles in categories which are offline

$dontshowofflinearticles : boolean

 

If $exclude = true => the specified search range is excluded from search, otherwise included

$exclude : boolean

 

Instance of class Index

$index : object

 

If $protected = true => do not search articles which are offline or articles in catgeories which are offline (protected)

$protected : boolean

 

logical combination of searchwords (and, or)

$search_combination : string

 

type of db search like => 'sql like', regexp => 'sql regexp'

$search_option : string

 

Array of article id's with information about cms-types, occurence of keyword/searchword, similarity ...

$search_result : array

 

the search words

$search_words : array

 

the words which should be excluded from search

$search_words_exclude : array

 

array of searchable articles

$searchable_arts : array

 

Flag to enable debug

$bDebug : bool
Inherited

inherited_from \SearchBaseAbstract::$$bDebug
 

Contenido configuration data

$cfg : array
Inherited

inherited_from \SearchBaseAbstract::$$cfg
 

Client id

$client : int
Inherited

inherited_from \SearchBaseAbstract::$$client
 

Language id of a client

$lang : int
Inherited

inherited_from \SearchBaseAbstract::$$lang
 

Contenido database object

$oDB : \DB_Contenido
Inherited

inherited_from \SearchBaseAbstract::$$oDB