用PHP构建自定义搜索引擎Sphinx

1. 创建索引
$ sudo /usr/local/bin/indexer --config /usr/local/etc/sphinx.conf --all Sphinx 0.9.7 Copyright (c) 2001-2007, Andrew Aksyonoff using config file '/usr/local/etc/sphinx.conf'... indexing index 'catalog'... collected 8 docs, 0.0 MB sorted 0.0 Mhits, 82.8% done total 8 docs, 149 bytes total 0.010 sec, 14900.00 bytes/sec, 800.00 docs/sec

 

2.  search 测试索引

$ /usr/local/bin/search --config /usr/local/etc/sphinx.conf ENG Sphinx 0.9.7 Copyright (c) 2001-2007, Andrew Aksyonoff index 'catalog': query 'ENG ': returned 2 matches of 2 total in 0.000 sec displaying matches: 1. document=8, weight=1, assembly=5, model=7 id=8 partno=ENG088 descrīption=Cylinder head price=55 2. document=9, weight=1, assembly=5, model=3 id=9 partno=ENG976 descrīption=Large cylinder head price=65 words: 1. 'eng': 2 documents, 2 hits $ /usr/local/bin/search --config /usr/local/etc/sphinx.conf wind Sphinx 0.9.7 Copyright (c) 2001-2007, Andrew Aksyonoff index 'catalog': query 'wind ': returned 2 matches of 2 total in 0.000 sec displaying matches: 1. document=1, weight=1, assembly=3, model=1 id=1 partno=WIN408 descrīption=Portal window price=423 2. document=5, weight=1, assembly=3, model=1 id=5 partno=WIN958 descrīption=Windshield, front price=500 words: 1. 'wind': 2 documents, 2 hits $ /usr/local/bin/search / --config /usr/local/etc/sphinx.conf --filter model 3 ENG Sphinx 0.9.7 Copyright (c) 2001-2007, Andrew Aksyonoff index 'catalog': query 'ENG ': returned 1 matches of 1 total in 0.000 sec displaying matches: 1. document=9, weight=1, assembly=5, model=3 id=9 partno=ENG976 descrīption=Large cylinder head price=65 words: 1. 'eng': 2 documents, 2 hits

 

PHP调用Sphinx搜索引擎

<?php include('sphinx-0.9.7/api/sphinxapi.php'); $cl = new SphinxClient(); $cl->SetServer( "localhost", 3312 ); $cl->SetMatchMode( SPH_MATCH_ANY ); $cl->SetFilter( 'model', array( 3 ) ); $result = $cl->Query( 'cylinder', 'catalog' ); if ( $result === false ) {  echo "Query failed: " . $cl->GetLastError() . "./n"; } else {  if ( $cl->GetLastWarning() ) {   echo "WARNING: " . $cl->GetLastWarning() . "";  }  if ( ! empty($result["matches"]) ) {   foreach ( $result["matches"] as $doc => $docinfo ) {    echo "$doc/n";   }   print_r( $result );  } } exit; ?>

 

测试代码,需要为 Sphinx 创建 log 目录,启动 searchd,然后运行 PHP 应用程序

 

PHP 应用程序
$ sudo mkdir -p /var/log/searchd
$ sudo /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
$ php search.php
9
Array (
[fields] => Array (
 [0] => partno
 [1] => descrīption
)

[attrs] => Array(
 [assembly] => 1
 [model] => 1
)

[matches] => Array(
 [9] => Array(
  [weight] => 1
  [attrs] => Array(
   [assembly] => 5
   [model] => 3
  )
 )
)

[total] => 1
[total_found] => 1
[time] => 0.000
[words] => Array(
 [cylind] => Array(
  [docs] => 2
  [hits] => 2
 )
)
)

你可能感兴趣的:(PHP,搜索引擎,测试,assembly,search,query)