mnoGoSearch
在线手册:中文  英文

mnoGoSearch 函数

Table of Contents


mnoGoSearch
在线手册:中文  英文

用户评论:

mikko at sorl dot net (2006-10-15 04:46:53)

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_MODEUDM_MODE_ALL);
        
$this->set(UDM_PARAM_CHARSET'iso-8859-1');
        
$this->set(UDM_PARAM_BROWSER_CHARSET'iso-8859-1');
        
$this->set(UDM_PARAM_WORD_MATCHUDM_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 || $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->resUDM_PARAM_FOUND);

        
$found udm_get_res_param($this->resUDM_PARAM_NUM_ROWS);

        if(
$found) {
            
$b udm_get_res_param($this->resUDM_PARAM_FIRST_DOC);
            
$e udm_get_res_param($this->resUDM_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 (2005-06-22 05:22:42)

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 (2002-07-10 21:23:47)

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 (2002-02-27 09:32:35)

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 (2001-06-12 12:50:28)

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 (2001-04-25 03:53:49)

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

易百教程