RSS订阅
PHP程序员站--WWW.PHPERZ.COM  
网站地图
高级搜索
收藏本站

 当前位置:主页 >> PHP高级编程 >> 高级应用 >> 文章内容
用 PHP 构建自定义搜索引擎
[收藏此页[打印本页]   
来源:网页教学网  作者:Martin Streicher  发布时间:2007-12-08


清单 9. Body Parts 的示例 sphinx.conf

source catalog
{
type = mysql

sql_host = localhost
sql_user = reaper
sql_pass = s3cr3t
sql_db = body_parts
sql_sock = /var/run/mysqld/mysqld.sock
sql_port = 3306

PHP程序员站--PHP程序员之家

# indexer query
# document_id MUST be the very first field
# document_id MUST be positive (non-zero, non-negative)
# document_id MUST fit into 32 bits
# document_id MUST be unique

phperz.com

sql_query = \
SELECT \
id, partno, description, \
assembly, model \
FROM \
Catalog; www~phperz~.com

sql_group_column = assembly
sql_group_column = model www~phperz~.com

# document info query
# ONLY used by search utility to display document information
# MUST be able to fetch document info by its id, therefore
# MUST contain '$id' macro
#

PHP程序员站

sql_query_info = SELECT * FROM Inventory WHERE id=$id
}

www phperz com

index catalog
{
source = catalog
path = /var/data/sphinx/catalog
morphology = stem_en www phperz com

min_word_len = 3
min_prefix_len = 0
min_infix_len = 3
} PHP程序员站

searchd
{
port = 3312
log = /var/log/searchd/searchd.log
query_log = /var/log/searchd/query.log
pid_file = /var/log/searchd/searchd.pid
}
PHP程序员站


底部的 searchd 部分将配置 searchd 守护程序本身。该部分中的条目不言自明。query.log 尤为有用:它将在运行时显示每次搜索并显示结果,例如搜索的文档数和匹配总数。

PHP程序员站--PHP程序员之家


www phperz com

 

PHP程序员站

构建和测试索引 PHP程序员站

您现在已经准备好为 Body Parts 应用程序构建索引。为此,需要执行以下步骤:

PHP程序员站--PHP程序员之家

键入 $ sudo mkdir -p /var/data/sphinx 创建目录结构 /var/data/sphinx
假定 MySQL 正在运行,使用如下所示的代码运行索引器来创建索引。

PHP程序员站

清单 10. 创建索引

$ sudo /usr/local/bin/indexer --config /usr/local/etc/sphinx.conf --all
Sphinx 0.9.7
Copyright (c) 2001-2007, Andrew Aksyonoff

PHP程序员站--PHP程序员之家

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

PHP程序员站--PHP程序员之家

注: -all 参数将重构 sphinx.conf 中列出的所有索引。如果不需要重构所有索引,您可以使用其他参数只对部分索引进行重构。
您现在可以使用如下所示的代码用 search 实用程序测试索引(不必运行 searchd 即可使用 search)。

PHP程序员站

清单 11. 用 search 测试索引

$ /usr/local/bin/search --config /usr/local/etc/sphinx.conf ENG
Sphinx 0.9.7
Copyright (c) 2001-2007, Andrew Aksyonoff

PHP程序员站

index 'catalog': query 'ENG ': returned 2 matches of 2 total in 0.000 sec

PHP程序员站

displaying matches:
1. document=8, weight=1, assembly=5, model=7
id=8
partno=ENG088
description=Cylinder head
price=55
2. document=9, weight=1, assembly=5, model=3
id=9
partno=ENG976
description=Large cylinder head
price=65

PHP程序员站

words:
1. 'eng': 2 documents, 2 hits PHP程序员站

$ /usr/local/bin/search --config /usr/local/etc/sphinx.conf wind
Sphinx 0.9.7
Copyright (c) 2001-2007, Andrew Aksyonoff

www phperz com

index 'catalog': query 'wind ': returned 2 matches of 2 total in 0.000 sec phperz.com

displaying matches:
1. document=1, weight=1, assembly=3, model=1
id=1
partno=WIN408
description=Portal window
price=423
2. document=5, weight=1, assembly=3, model=1
id=5
partno=WIN958
description=Windshield, front
price=500 www.phperz.com

words:
1. 'wind': 2 documents, 2 hits www phperz com

$ /usr/local/bin/search \
--config /usr/local/etc/sphinx.conf --filter model 3 ENG
Sphinx 0.9.7
Copyright (c) 2001-2007, Andrew Aksyonoff PHP程序员站

index 'catalog': query 'ENG ': returned 1 matches of 1 total in 0.000 sec PHP程序员站

displaying matches:
1. document=9, weight=1, assembly=5, model=3
id=9
partno=ENG976
description=Large cylinder head
price=65 www phperz com

words:
1. 'eng': 2 documents, 2 hits

PHP程序员站


第一条命令 /usr/local/bin/search --config /usr/local/etc/sphinx.conf ENG 在零件号中找到了两个含有 ENG 的结果。第二条命令 /usr/local/bin/search --config /usr/local/etc/sphinx.conf wind 在两个零件描述中找到了子字符串 wind。而第三条命令把结果限定为 model 为 3 的条目。

www phperz com

 

www phperz com


编写代码 www phperz com

最后,您可以编写 PHP 代码来调用 Sphinx 搜索引擎。Sphinx PHP API 非常小并且易于掌握。清单 12 是一个小型 PHP 应用程序,用于调用 searchd 以得到使用上面所示的最后一条命令得到的相同结果("在属于型号 3 的名称中找到含有 ‘cylinder' 的所有零件")。 PHP程序员站


清单 12. 从 PHP 调用 Sphinx 搜索引擎

>?php
include('sphinx-0.9.7/api/sphinxapi.php'); www~phperz~.com

$cl = new SphinxClient();
$cl- $cl- $cl- phperz.com

$result = $cl-

PHP程序员站--PHP程序员之家

if ( $result === false ) {
echo "Query failed: " . $cl- }
else {
if ( $cl- echo "WARNING: " . $cl- }

www~phperz~.com

if ( ! empty($result["matches"]) ) {
foreach ( $result["matches"] as $doc =< $docinfo ) {
echo "$doc\n";
}

print_r( $result );

 上一篇:帝国网站管理系统v4.7测试版发布   下一篇:利用PHP+JavaScript打造AJAX搜索窗
 
 相关文章
 
发表评论
全部评论(0条)
 
 站内搜索
 热门搜索 mysql  基础  php基础  url
高级搜索 网站地图 站长工具 IP查询 收藏本站
 热点文章
 随机推荐
网站首页 | 网站地图 | 高级搜索 | RSS订阅
PHP程序员站 Copyright © 2007,PHPERZ.COM All Rights Reserved 粤ICP备07503606号 联系站长