用 PHP构建自定义搜索引擎(4)_PHP应用_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

用 PHP构建自定义搜索引擎(4)

作者:黑客防线网安PHP维护基地 来源:黑客防线网安PHP维护基地 浏览次数:0

黑客防线网安网讯:  Schematic 表  Schematic 表将把零件与部件和车型版本绑定在一起。因此,将使用 Schematic 表来查找组装 1979 J Class 敞篷车引擎的所有零件。Schematic 表中的每行都有一个惟一 ID,...

  Schematic 表

  Schematic 表将把零件与部件和车型版本绑定在一起因此将使用 Schematic 表来查找组装 1979 J Class 敞篷车引擎的所有零件Schematic 表中的每行都有一个惟一 ID一个引用 Inventory 表行的外键,一个标识部件的外键,以及用于引用 Model 表中特定型号和版本的另一个键。各行如清单 4 所示:

  清单 4. Schematic 表

CREATE TABLE Schematic (
id int(10) unsigned NOT NULL auto_increment,
partno_id int(10) unsigned NOT NULL,
assembly_id int(10) unsigned NOT NULL,
model_id int(10) unsigned NOT NULL,
PRIMARY KEY (id),
KEY partno_index USING BTREE (partno_id),
KEY assembly_index USING BTREE (assembly_id),
KEY model_index USING BTREE (model_id),
FOREIGN KEY (partno_id) REFERENCES Inventory(id),
FOREIGN KEY (assembly_id) REFERENCES Assembly(id),
FOREIGN KEY (model_id) REFERENCES Model(id)
) ENGINE=InnoDB;

  为了强化表的意图,下面是 Schematic 中的一张小型行列表:

INSERT INTO `Schematic`
(`id`, `partno_id`, `assembly_id`, `model_id`)
VALUES
(1,6,5,1),
(2,8,5,1),
(3,1,3,1),
(4,5,3,1),
(5,8,5,7),
(6,6,5,7),
(7,4,7,3),
(8,9,5,3);

  搜索表

  定义了这些表后,就可以轻松地响应很多搜索:

  ·显示特定型号的所有版本
  ·列出装配特殊型号和版本所需的所有部件
  ·显示构成特定型号和版本的特殊部件的所有零件

  但是很多搜索代价较大:

  ·查找所有模型和版本中出现零件号开头为 “WIN” 的所有零件
  ·查找描述中有 “lacquer” 或 “paint” 的那些零件
  ·查找描述中有 “black leather” 的所有零件
  ·查找描述中有 “paint” 的所有 2002 J 系列零件

  这些搜索中的每个搜索都要求使用长篇的 JOIN 子句或代价高昂的 LIKE 子句,尤其是在 Inventory 表和 Schematic 表十分大时更是如此。而且,复杂的文本搜索完全超出了 MySQL 的能力。要搜索大量文本数据,请考虑构建和使用 Sphinx 索引。

  集成 Sphinx 软件

  要应用 Sphinx 来解决问题,您必须定义一个或多个数据源以及一个或多个索引。

  source 将标识数据库来建立索引,提供验证信息,并且定义查询用以构造每行。数据源可以随意地标识一列或多列作为过滤器,Sphinx 将之称为组。您将使用组来过滤结果。例如,单词描述可能得到 900 个匹配。如果只对特定型号的汽车匹配感兴趣,则可以进一步使用型号组进行过滤。

  index 将要求获得数据源(即一组数据行)并定义应当如何为已从数据源中提取出来的数据编目。

  您将在 sphinx.conf 文件中定义数据源和索引。Body Parts 的数据源是 MySQL 数据库。清单 5 显示了名为 catalog 的数据源的部分定义 —— 指定连接的数据库以及如何建立连接(主机、套接字、用户和密码)的代码片段。

  清单 5. 用于访问 MySQL 数据库的设置

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 

  接下来,创建一个查询以生成要被索引的行。通常,将创建 SELECT 子句,可

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-13989-1.html
网站维护教程更新时间:2012-03-30 05:07:03  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer