sphinx 全文搜索应用(二)

  • A+
所属分类:Sphinx

一.安装配置

安装参见: http://www.ttlsa.com/html/1236.html

二.索引说明

在查询语句中选择许多列包含在索引中。文档ID(documnet ID)必须位于第一列,并且是一个唯一的无符号的正整数。在这种情况下表中的id字段将被视为创建的索引。

文档ID在SQL查询语句中是第一个字段,它必须是一个唯一的非零无符号的非负整数。如果使用多个索引来源,所有来源的文档ID必须唯一。

除文档ID字段外,所有查询选择字段,默认情况下都视为创建全文索引字段。

如果想一个或多个字段作为索引属性,那么可以使用sql_arrt_*选项来定义。

下面的选项可用于不同类型的属性声明:

sql_attr_unit: 无符号整数属性(32位)

sql_attr_bool: 布尔属性

sql_attr_bigint: 符号整数属性(64位)

sql_attr_timestamp: unix时间戳属性

sql_attr_str2ordinal: 序串号属性

sql_attr_float: 浮点属性

sql_attr_multi: 多值属性(MVA)

sql_attr_multi格式如下:

sql_attr_multi = ATTR-TYPE ATTR-NAME 'from' SOURCE-TYPE [;QUERY] [;RANGE-QUERY]

选项参数如下:

ATTR-TYPE: uint或timestamp

ATTR-NAME: 属性名称

SOURCE-TYPE: field或query或ranged-query

QUERY: 通过一个SQL语句查询获取所有文档ID,属性值对

RANGE-QUERY: 通过SQL语句查询来获取最小和最大的ID值,类似于sql_query_range

例如:参见http://www.ttlsa.com/html/1346.html

sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents

sql_attr_uint = group_id

sql_attr_timestamp = date_added

id作为文档ID,group_id作为一个无符号整数属性, date_added作为时间戳属性。 而剩下的字段titel, content将作为全文索引字段。

当对索引进行搜索时,搜索字词匹配的title和content字段,而这两个属性可用于排序和筛选。

sql_query_info是可选的。主要用于在命令行界面(CLI)下搜索查询时,显示索引中匹配的属性。

如果加上sql_query_info = SELECT * FROM documents WHERE id=$id ($id为查询到的文档ID)

当把sql_query_info注释掉,查询结果如下:

 

三.blog系统下使用

1.新建相关表

mysql> CREATE DATABASE ttlsa_com ;

Query OK, 1 row affected (0.00 sec)

#帖子表

#作者表,每个post属于一个作者,一个作者可以有多个post

#类别表,一个post可以属于多个类别,一个类别可以有多个post

#posts表和categories表关联表

2.sphinx.conf配置如下:

#创建索引

#使用sphinx搜索php并按照时间升序排序

#使用mysql搜索php

#使用sphinx php api搜索

# vi search.php

# php search.php

#搜索包含php且作者是'Rita Chouhan'

#使用sphinx php api搜索

# vi search.php

# php search.php

#搜索包含sphinx且类型属于5的所有内容(这里将使用到MVA)

# search --filter category_id 5 sphinx

通过mysql数据库查询:

如需转载请注明出处:http://www.ttlsa.com/html/1354.html

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: