文字

mnoGoSearch 函数

Table of Contents

  • udm_add_search_limit — Add various search limits
  • udm_alloc_agent_array — Allocate mnoGoSearch session
  • udm_alloc_agent — Allocate mnoGoSearch session
  • udm_api_version — Get mnoGoSearch API version
  • udm_cat_list — Get all the categories on the same level with the current one
  • udm_cat_path — Get the path to the current category
  • udm_check_charset — Check if the given charset is known to mnogosearch
  • udm_clear_search_limits — Clear all mnoGoSearch search restrictions
  • udm_crc32 — Return CRC32 checksum of given string
  • udm_errno — Get mnoGoSearch error number
  • udm_error — Get mnoGoSearch error message
  • udm_find — Perform search
  • udm_free_agent — Free mnoGoSearch session
  • udm_free_ispell_data — Free memory allocated for ispell data
  • udm_free_res — Free mnoGoSearch result
  • udm_get_doc_count — Get total number of documents in database
  • udm_get_res_field — Fetch a result field
  • udm_get_res_param — Get mnoGoSearch result parameters
  • udm_hash32 — Return Hash32 checksum of given string
  • udm_load_ispell_data — Load ispell data
  • udm_set_agent_param — Set mnoGoSearch agent session parameters

用户评论:

[#1] 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 ? :)

[#2] 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>
<?php
define
('MNOGOSEARCH_WIN32',
    (
strtoupper(substr(PHP_OS,0,3))=='WIN') && extension_loaded('COM'));

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


$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>|| !$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>

[#3] 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

上一篇: 下一篇: