PHP Doku:: mnoGoSearch Funktionen - ref.mnogosearch.html

Verlauf / Chronik / History: (5) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzSuchmaschinenerweiterungenmnoGoSearchmnoGoSearch Funktionen

Ein Service von Reinhard Neidl - Webprogrammierung.

mnoGoSearch

<<Vordefinierte Konstanten

udm_add_search_limit>>


UnterSeiten:

mnoGoSearch Funktionen

Inhaltsverzeichnis


6 BenutzerBeiträge:
- Beiträge aktualisieren...
mikko at sorl dot net
15.10.2006 13:46
Well since the function udm_get_res_param used with UDM_PARAM_NUM_ROWS does infact not get the number of rows on the current page, it can actualy find more rows than specified by UDM_PARAM_PAGE_SIZE, ??? well i had to rewrite the some stuff I also added highlightning since the parameter  UDM_PARAM_HLBEG nor UDM_PARAM_HLEND doesnt seem to work, alot of things here are fairly undocumented, I also found out after reading the Search_Mnogosearch pear class that replacing "\2" and "\3" in the text with HLBEG and HLEND works. well here is the class rewritten (without fetch, just find):

<?php

class MnogoSearch
{
    public   
$matches = NULL;
    public   
$total   = NULL;
    public   
$hilites = array('title', 'text');
    public   
$hlbeg   = '<span class="hilite">';
    public   
$hlend   = '</span>';

    protected
$agent   = NULL;
    protected
$res     = NULL;

    public function
__construct() {

       
$this->agent = udm_alloc_agent('mysql://user:pass@localhost/mnogosearch/');

       
$this->set(UDM_PARAM_SEARCH_MODE, UDM_MODE_ALL);
       
$this->set(UDM_PARAM_CHARSET, 'iso-8859-1');
       
$this->set(UDM_PARAM_BROWSER_CHARSET, 'iso-8859-1');
       
$this->set(UDM_PARAM_WORD_MATCH, UDM_MATCH_SUBSTR);

    }

    private function
hiLite($t) {
        if (
$t == '')
            return
'';
       
$t = str_replace("\2", $this->hlbeg, $t);
       
$t = str_replace("\3", $this->hlend, $t);
        return
$t;
    }

    public function
set($k, $v) {
       
udm_set_agent_param($this->agent, $k, $v);
    }

    public function
find($q, $page=0, $rows=10) {

        if (
$page < 0 || $rows <= 0) {
           
$page = 0;
           
$rows = 10;
        }

       
$this->set(UDM_PARAM_PAGE_SIZE, $rows);
       
$this->set(UDM_PARAM_PAGE_NUM, $page);

       
$this->res = udm_find($this->agent, $q);
       
$this->total = udm_get_res_param($this->res, UDM_PARAM_FOUND);

       
$found = udm_get_res_param($this->res, UDM_PARAM_NUM_ROWS);

        if(
$found) {
           
$b = udm_get_res_param($this->res, UDM_PARAM_FIRST_DOC);
           
$e = udm_get_res_param($this->res, UDM_PARAM_LAST_DOC);
           
$rows = $e - $b + 1;

           
$fields = array('urlid', 'url', 'content', 'title', 'keywords', 'desc',
                           
'text', 'size', 'rating', 'modified', 'order', 'crc', 'category',
                           
'lang', 'charset', 'siteid', 'pop_rank', 'originid');

            for(
$i=0; $i<$rows; $i++){
                for(
$j=0; $j<count($fields); $j++) {
                   
$this->matches[$i][$fields[$j]] = udm_get_res_field($this->res, $i, $j+1);
                }
                foreach(
$this->hilites as $hilite) {
                   
$this->matches[$i][$hilite] = $this->hiLite($this->matches[$i][$hilite]);
                }

            }
            return
$rows;

        } else {
            return
FALSE;
        }
    }

    public function
__destruct() {
       
udm_free_agent($this->agent);
        if (isset(
$this->res)) {
           
udm_free_res($this->res);
        }
    }
}

?>

Im thinking, maybe swish-e is better ? :)
bloodjazman at gmail dot com
22.06.2005 14:22
for win32 users, mnogosearch since version 3.2.x
support COM interface

for Reflection API of COM use Visual Studio .NET
-> Tools ..
-> OLE/COM object viewer
- > C:\Program Files\mnoGoSearch\searchcom.dll

simple code

<pre>
<?
define
('MNOGOSEARCH_WIN32',
    (
strtoupper(substr(PHP_OS,0,3))=='WIN') && extension_loaded('COM'));

if (!
MNOGOSEARCH_WIN32)
 die(
'MnoGoSearch COM not loaded');

/** Create COM object */
$agent = new COM('MnoGoSearch.GoSearch')
                    or die(
'Can\'t create COM object MnoGoSearch.GoSearch');
com_load_typelib('MnoGoSearch.GoSearch');
//mysql://user:passwd@host:port/database/?mode=multi
$agent->DBAddr = $params['DBAddr'];
//buggy, not work
//$agent->DBMode = $params['DBMode'];
$agent->SetCharset($params['Charset']);
$agent->SetCacheMode(true);

$q = 'q='. $query .'&np='. $_REQUEST['page'] .'&ps='. $_REQUEST['pg_size'] .'&m='. $_REQUEST['match'];
$q .= '&wm='. $_REQUEST['word_match'] .'&ul='. $_REQUEST['url_match']. '&wf='. $_REQUEST['where_find'];
$q .= '&typ='. $_REQUEST['content_type'] .'&s='. $_REQUEST['sortby'].'';

//!!! EXECUTE SEARCH QUERY
$result = $agent->Find($q);

if (
$agent->ErrorCode>0 || !$result->Valid)
   die(
'MnogoSearch win32 COM Error #'.$agent->ErrorCode.' - '.$agent->ErrorDescription);

$last=$result->LastDoc;
$first=$result->FirstDoc;
$hl_begin = '<span class="mnogosearch_hilight">';
$hl_end= '</span>';

$fetched_result=array();
$i=0;

for(
$row=$first;$row<=$last;$row++) {
   
$i=$row-$first;
   
$line = $result->Line($row);
   
$fetched_result[$i] = array(
       
'order'=>$line->Section('Order', $hl_begin, $hl_end),
       
'url'=> $line->Section('URL', $hl_begin, $hl_end),
       
'relevance'=>$line->Section('Score', $hl_begin, $hl_end),
       
'pagerank'=> $line->Section('Pop_Rank', $hl_begin, $hl_end),
       
'content_type'=> $line->Section('Content-Type', $hl_begin, $hl_end),
       
'content_length'=> $line->Section('Content-Length', $hl_begin, $hl_end),
       
'last_time'=> $line->Section('Last-Modified', $hl_begin, $hl_end),
       
'title'=> $line->Section('title', $hl_begin, $hl_end),
       
'body'=> $line->Section('body', $hl_begin, $hl_end),
       
'metadesc'=> $line->Section('meta.description', $hl_begin, $hl_end),
       
'metakeywords'=> $line->Section('meta.keywords', $hl_begin, $hl_end)
    );
}

var_dump($fetched_result);

echo
'<br/>search time : '.$result->SearchSeconds;
echo
'<br/>words stats :'.$result->WordInfo;

echo
'<br/>pg_count: '.$result->NPages;
echo
'<br/>total_rows: '. $result->Count;
echo
'<br/>first_doc: '.$result->FirstDoc;
echo
'<br/>last_doc: '.$result->LastDoc;
echo
'<br/>rows_in_page: '.$result->RowsOnPage;

?>
</pre>
m at manyone dot net
11.07.2002 6:23
I finally got PHP 4.2.1 to compile with mnoGoSearch 3.2.2 ; trick is to build the shared mnoGoSearch and not the static version (opposite from mnoGoSearch defaults), and not to use --disable-rpath in PHP.
brasnah-dev at brasnah dot com
27.02.2002 18:32
There is always a collisions for FTP name between PHP releease 4.2.0-dev and mnogosearch 3.2.3. So, first compile mnogosearch with --disable-ftp.
marten dot gustafsson at i_wont_tell_you dot com
12.06.2001 21:50
The name collision between php's builtin FTP functions and mnoGo's have been fixed since version 3.1.14 of mnoGoSearch according to;  http://www.mnogosearch.ru/history.html
php-install at lists dot php dot net
25.04.2001 12:53
I have found that if you compile php with "--with-ftp and --with-mnogosearch=/dir" you must compile and build mnogosearch with "--disable-ftp" first. There are some naming conflicts between php's ftp libs and mno's ftp libs.

Hope this helps



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)