Sphinx 0.9.9 Coreseek 3.2 中文版参考手册

更新时间:2023-04-05 23:41:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Sphinx 0.9.9/Coreseek 3.2 参考手册

Sphinx--强大的开源全文检索引擎,Coreseek--免费开源的中文全文检索引擎

Copyright ? 2006-2010 (coreseek)nzinfo, , (coreseek)HonestQiao, , (sphinx)Andrew Aksyonoff,

本地化服务

中文技术支持:bdb921addd3383c4bb4cd2da/contact/

中文文档翻译:bdb921addd3383c4bb4cd2da/products-install/#doc_cn

1

目录

1. 简介 (1)

1.1. 什么是Sphinx/Coreseek (1)

1.2. Sphinx/Coreseek 的特性 (1)

1.3. 如何得到Sphinx/Coreseek (2)

1.4. 许可协议 (2)

1.5. 作者和贡献者 (3)

作者 (3)

贡献者 (3)

1.6. 历史 (3)

2. 安装 (4)

2.1. 支持的操作系统 (4)

2.2. 需要的工具 (5)

2.3. 在Linux、BSD上安装Sphinx/Coreseek (5)

2.4. 在Windows上安装Sphinx/Coreseek (6)

2.5. 已知的安装问题和解决办法 (7)

2.6. Sphinx/Coreseek快速入门教程 (7)

3. 建立索引 (9)

3.1. 数据源 (9)

3.2. 属性 (9)

示例: sphinx.conf 片段: (10)

示例:应用程序代码 (PHP): (10)

3.3. MVA (多值属性) (11)

3.4. 索引 (12)

3.5. 源数据的限制 (12)

3.6. 字符集、大小写转换和转换表 (13)

3.7. SQL 数据源 (MySQL, PostgreSQL) (13)

区段查询 (14)

后查询(sql_post) vs. 索引后查询(sql_post_index) (14)

3.8. xmlpipe 数据源 (15)

3.9. xmlpipe2 数据源 (16)

3.10. Python 数据源 (18)

3.11. 实时索引更新 (18)

3.12. 索引合并 (20)

4. 搜索 (20)

4.1. 匹配模式 (20)

4.2. 布尔查询语法 (21)

4.3. 扩展查询语法 (22)

4.4. 权值计算 (25)

4.5. 排序模式 (26)

SPH_SORT_TIME_SEGMENTS 模式 (26)

SPH_SORT_EXTENDED 模式 (27)

2

SPH_SORT_EXPR 模式 (27)

4.6. 结果分组(聚类) (29)

4.7. 分布式搜索 (30)

4.8. searchd查询日志格式 (31)

4.9. MySQL 协议支持与 SphinxQL (32)

5. 命令行工具参考 (37)

5.1. indexer命令参考 (37)

5.2. searchd命令参考 (40)

5.3. search命令参考 (43)

5.4. spelldump命令参考 (45)

5.5. indextool命令参考 (46)

6. API参考 (46)

6.1. 通用API方法 (47)

6.1.1. GetLastError (错误信息) (47)

6.1.2. GetLastWarning (告警信息) (47)

6.1.3. SetServer (设置搜索服务) (47)

6.1.4. SetRetries (设置失败重试) (48)

6.1.5. SetConnectTimeout (设置超时时间) (48)

6.1.6. SetArrayResult (设置结果返回格式) (48)

6.1.7. IsConnectError (检查链接错误) (48)

6.2. 通用搜索设置 (49)

6.2.1. SetLimits (设置结果集偏移量) (49)

6.2.2. SetMaxQueryTime (设置最大搜索时间) (49)

6.2.3. SetOverride (设置临时属性值覆盖) (50)

6.2.4. SetSelect (设置返回信息的内容) (50)

示例: (51)

6.3. 全文搜索设置 (51)

6.3.1. SetMatchMode (设置匹配模式) (51)

6.3.2. SetRankingMode (设置评分模式) (51)

6.3.3. SetSortMode (设置排序模式) (52)

6.3.4. SetWeights (设置权重) (52)

6.3.5. SetFieldWeights (设置字段权重) (52)

6.3.6. SetIndexWeights (设置索引权重) (53)

6.4. 结果集过滤设置 (53)

6.4.1. SetIDRange (设置查询ID范围) (53)

6.4.2. SetFilter (设置属性过滤) (54)

6.4.3. SetFilterRange (设置属性范围) (54)

6.4.4. SetFilterFloatRange (设置浮点数范围) (54)

6.4.5. SetGeoAnchor (设置地表距离锚点) (54)

6.5. 分组设置 (55)

6.5.1. SetGroupBy (设置分组的属性) (55)

6.5.2. SetGroupDistinct (设置分组计算不同值的属性) (55)

6.6. 搜索数据 (56)

6.6.1. Query (查询) (56)

3

6.6.2. AddQuery (增加批量查询) (57)

6.6.3. RunQueries (执行批量查询) (58)

6.6.4. ResetFilters (清除当前设置的过滤器) (59)

6.6.5. ResetGroupBy (清除现有的分组设置) (59)

6.7. 附加方法 (59)

6.7.1. BuildExcerpts (产生文本摘要和高亮) (59)

6.7.2. UpdateAttributes (更新属性) (60)

6.7.3. BuildKeywords (获取分词结果) (61)

6.7.4. EscapeString (转义特殊字符) (61)

6.7.5. Status (查询服务状态) (62)

6.8. 持久连接 (62)

6.8.1. Open (打开连接) (62)

6.8.2. Close (关闭连接) (62)

7. MySQL 存储引擎 (SphinxSE) (62)

7.1. SphinxSE 概览 (62)

7.2. 安装 SphinxSE (63)

7.2.1. 为 MySQL 5.0.x 编译 SphinxSE (63)

7.2.2. 为 MySQL 5.1.x 编译 SphinxSE (64)

7.2.3. 检查 SphinxSE 安装 (64)

7.3. 使用 SphinxSE (65)

7.4. 通过 MySQL 生成片段 (摘要) (68)

8. 报告BUG (69)

安装问题 (69)

运行问题 (69)

调试断点、崩溃和停止响应 (70)

9. sphinx.conf选项参考 (71)

9.1. 数据源配置选项 (71)

9.1.1. type (71)

示例: (72)

9.1.2. sql_host (72)

示例: (72)

9.1.3. sql_port (72)

示例: (72)

9.1.4. sql_user (72)

示例: (72)

9.1.5. sql_pass (72)

示例: (72)

9.1.6. sql_db (73)

示例: (73)

9.1.7. sql_sock (73)

示例: (73)

9.1.8. mysql_connect_flags (73)

示例: (73)

9.1.9. mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca (74)

示例: (74)

4

9.1.10. odbc_dsn (74)

示例: (74)

9.1.11. sql_query_pre (74)

示例: (75)

9.1.12. sql_query (75)

示例: (75)

9.1.13. sql_query_range (75)

示例: (76)

9.1.14. sql_range_step (76)

示例: (76)

9.1.15. sql_query_killlist (76)

示例: (77)

9.1.16. sql_attr_uint (77)

示例: (77)

9.1.17. sql_attr_bool (77)

示例: (78)

9.1.18. sql_attr_bigint (78)

示例: (78)

9.1.19. sql_attr_timestamp (78)

示例: (78)

9.1.20. sql_attr_str2ordinal (78)

示例: (79)

9.1.21. sql_attr_float (79)

示例: (79)

9.1.22. sql_attr_multi (79)

示例: (80)

9.1.23. sql_query_post (80)

示例: (80)

9.1.24. sql_query_post_index (80)

示例: (81)

9.1.25. sql_ranged_throttle (81)

示例: (81)

9.1.26. sql_query_info (81)

示例: (81)

9.1.27. xmlpipe_command (81)

示例: (81)

9.1.28. xmlpipe_field (81)

示例: (82)

9.1.29. xmlpipe_attr_uint (82)

示例: (82)

9.1.30. xmlpipe_attr_bool (82)

示例: (82)

9.1.31. xmlpipe_attr_timestamp (82)

示例: (82)

9.1.32. xmlpipe_attr_str2ordinal (82)

示例: (82)

9.1.33. xmlpipe_attr_float (82)

5

示例: (83)

9.1.34. xmlpipe_attr_multi (83)

示例: (83)

9.1.35. xmlpipe_fixup_utf8 (83)

示例: (83)

9.1.36. mssql_winauth (83)

示例: (84)

9.1.37. mssql_unicode (84)

示例: (84)

9.1.38. unpack_zlib (84)

示例: (84)

9.1.39. unpack_mysqlcompress (84)

示例: (85)

9.1.40. unpack_mysqlcompress_maxsize (85)

示例: (85)

9.2. 索引配置选项 (85)

9.2.1. type (85)

示例: (85)

9.2.2. source (85)

示例: (86)

9.2.3. path (86)

示例: (87)

9.2.4. docinfo (87)

示例: (87)

9.2.5. mlock (87)

示例: (88)

9.2.6. morphology (88)

示例: (88)

9.2.7. min_stemming_len (88)

示例: (89)

9.2.8. stopwords (89)

示例: (89)

9.2.9. wordforms (89)

示例: (90)

9.2.10. exceptions (90)

示例: (92)

9.2.11. min_word_len (92)

示例: (92)

9.2.12. charset_type (92)

示例: (92)

9.2.13. charset_table (93)

示例: (94)

9.2.14. ignore_chars (94)

示例: (94)

9.2.15. min_prefix_len (94)

示例: (95)

9.2.16. min_infix_len (95)

6

示例: (95)

9.2.17. prefix_fields (95)

示例: (96)

9.2.18. infix_fields (96)

示例: (96)

9.2.19. enable_star (96)

示例: (96)

9.2.20. ngram_len (96)

示例: (97)

9.2.21. ngram_chars (97)

示例: (97)

9.2.22. phrase_boundary (97)

示例: (98)

9.2.23. phrase_boundary_step (98)

示例: (98)

9.2.24. html_strip (98)

示例: (99)

9.2.25. html_index_attrs (99)

示例: (99)

9.2.26. html_remove_elements (99)

示例: (99)

9.2.27. local (99)

示例: (99)

9.2.28. agent (100)

示例: (100)

9.2.29. agent_blackhole (101)

示例: (101)

9.2.30. agent_connect_timeout (101)

示例: (101)

9.2.31. agent_query_timeout (101)

示例: (101)

9.2.32. preopen (102)

示例: (102)

9.2.33. ondisk_dict (102)

示例: (102)

9.2.34. inplace_enable (102)

示例: (103)

9.2.35. inplace_hit_gap (103)

示例: (103)

9.2.36. inplace_docinfo_gap (103)

示例: (103)

9.2.37. inplace_reloc_factor (103)

示例: (103)

9.2.38. inplace_write_factor (104)

示例: (104)

9.2.39. index_exact_words (104)

示例: (104)

7

9.2.40. overshort_step (104)

示例: (104)

9.2.41. stopword_step (104)

示例: (104)

9.3. indexer程序配置选项 (105)

9.3.1. mem_limit (105)

示例: (105)

9.3.2. max_iops (105)

示例: (105)

9.3.3. max_iosize (105)

示例: (106)

9.3.4. max_xmlpipe2_field (106)

示例: (106)

9.3.5. write_buffer (106)

示例: (106)

9.4. searchd程序配置选项 (106)

9.4.1. listen (106)

示例: (107)

9.4.2. address (107)

示例: (107)

9.4.3. port (107)

示例: (107)

9.4.4. log (108)

示例: (108)

9.4.5. query_log (108)

示例: (108)

9.4.6. read_timeout (108)

示例: (108)

9.4.7. client_timeout (108)

示例: (108)

9.4.8. max_children (108)

示例: (108)

9.4.9. pid_file (109)

示例: (109)

9.4.10. max_matches (109)

示例: (109)

9.4.11. seamless_rotate (109)

示例: (110)

9.4.12. preopen_indexes (110)

示例: (110)

9.4.13. unlink_old (110)

示例: (111)

9.4.14. attr_flush_period (111)

示例: (111)

9.4.15. ondisk_dict_default (111)

示例: (111)

9.4.16. max_packet_size (111)

8

示例: (111)

9.4.17. mva_updates_pool (112)

示例: (112)

9.4.18. crash_log_path (112)

示例: (112)

9.4.19. max_filters (112)

示例: (112)

9.4.20. max_filter_values (113)

示例: (113)

9.4.21. listen_backlog (113)

示例: (113)

9.4.22. read_buffer (113)

示例: (113)

9.4.23. read_unhinted (113)

示例: (113)

10. Coreseek特殊选项参考 (114)

10.1. 中文分词核心配置 (114)

10.1.1. charset_dictpath (114)

示例: (114)

10.1.2. charset_type (114)

示例: (114)

10.2. MMSEG分词配置选项 (114)

10.2.1. merge_number_and_ascii (115)

例如: (115)

10.2.2. number_and_ascii_joint (115)

例如: (115)

10.2.3. compress_space (115)

10.2.4. seperate_number_ascii (115)

例如: (115)

10.3. Python数据源程序接口 (115)

10.3.1. GetScheme() (设置检索字段的属性) (117)

例如: (117)

10.3.2. GetKillList() (设置不参与检索的文档编号) (117)

例如: (117)

10.3.3. GetFieldOrder() (设置字段的顺序) (117)

例如: (117)

10.3.4. Connected() (获取数据前的连接处理) (118)

例如: (118)

10.3.5. OnBeforeIndex() (数据获取前处理) (118)

例如: (118)

10.3.6. NextDocument() (文档获取处理) (118)

例如: (118)

10.3.7. OnAfterIndex() (数据获取后处理) (118)

例如: (119)

10.3.8. OnIndexFinished() (索引完成时处理) (119)

例如: (119)

9

A. Sphinx revision history (119)

A.1. Version 0.9.9-release, 02 dec 2009 (119)

A.2. Version 0.9.9-rc2, 08 apr 2009 (121)

A.3. Version 0.9.9-rc1, 17 nov 2008 (123)

A.4. Version 0.9.8.1, 30 oct 2008 (124)

A.5. Version 0.9.8, 14 jul 2008 (125)

Indexing (125)

Search daemon (126)

Querying (127)

APIs and SphinxSE (127)

General (128)

Changes and fixes since 0.9.8-RC2 (128)

A.6. Version 0.9.7, 02 apr 2007 (129)

A.7. Version 0.9.7-RC2, 15 dec 2006 (131)

A.8. Version 0.9.7-RC1, 26 oct 2006 (131)

A.9. Version 0.9.6, 24 jul 2006 (132)

A.10. Version 0.9.6-RC1, 26 jun 2006 (132)

10

1. 简介

1.1. 什么是Sphinx/Coreseek

Sphinx是一个在GPLv2下分发的全文检索引擎;Coreseek 是一个可供企业使用的、基于Sphinx(可独立于Sphinx原始版本运行)的中文全文检索引擎,按照GPLv2协议发行,商业使用(例如, 嵌入到其他程序中)需要联系我们以获得商业授权。

一般而言,Sphinx是一个独立的全文搜索引擎;而Coreseek是一个支持中文的全文搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的中文全文搜索能力。Sphinx/Coreseek可以非常容易的与SQL数据库和脚本语言集成。

当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从管道标准输入读取入特定格式的XML数据。通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS的原生支持)。在最新的版本中,用户还可以使用Python脚本作为数据源来获取任何已知世界和未知世界的数据,这极大的扩展了数据源的来源。

搜索API支持PHP、Python、Perl、Rudy和Java,并且也可以用作MySQL存储引擎。搜索API非常简单,可以在若干个小时之内移植到新的语言上。

Sphinx 是SQL Phrase Index的缩写,但不幸的和CMU的Sphinx项目重名。

Coreseek (bdb921addd3383c4bb4cd2da/) 为Sphinx在中国地区的用户提供支持服务,如果您不希望纠缠与琐碎的技术细节,请直接联系我们。

本参考手册基于Sphinx 0.9.9最新文档,可能存在潜在的翻译错误,如果您发现本文的翻译错误,请联系我们。

我们的联系方式: coreseek@bdb921addd3383c4bb4cd2da 李沫南(nzinfo)

honestqiao@bdb921addd3383c4bb4cd2da 乔楚(HonestQiao 135********)

1.2. Sphinx/Coreseek 的特性

?高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒);

?高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于

0.1秒);

?可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档);

?提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;

?支持分布式搜索;

1

?提供文档片段(摘要以及高亮)生成功能;

?可作为MySQL的存储引擎提供搜索服务;

?支持布尔、短语、词语相似度等多种检索模式;

?文档支持多个全文检索字段(缺省配置下,最大不超过32个);

?文档支持多个额外的属性信息(例如:分组信息,时间戳等);

?停止词查询;

?支持单一字节编码和UTF-8编码,以及对GBK和BIG5的完善支持;

?支持英语、俄语词词干化和Soundex,以便进行词形学处理;

?原生的MySQL支持(同时支持MyISAM 和InnoDB );

?原生的PostgreSQL 支持;

?支持直接模拟为MySQL服务端运行;

?支持MMSeg分词引擎,用户可自定义词典;

?Python数据源支持,得以获取任何已知世界和未知世界的数据.

1.3. 如何得到Sphinx/Coreseek

Sphinx原始版本可以从Sphinx官方网站bdb921addd3383c4bb4cd2da/,Coreseek可以从Coreseek官方网站bdb921addd3383c4bb4cd2da/下载.

目前,Sphinx/Coreseek的发布包包括如下软件:

?indexer: 用于创建全文索引;

?search: 一个简单的命令行(CLI) 的测试程序,用于测试全文索引;

?searchd: 一个守护进程,其他软件可以通过这个守护进程进行全文检索;

?sphinxapi: 一系列searchd 的客户端API 库,用于流行的Web脚本开发语言(PHP, Python, Perl, Ruby, Java).

?spelldump: 一个简单的命令行工具,用于从 ispell 或 MySpell (OpenOffice内置绑定) 格式的字典中提取词条。当使用wordforms时

可用这些词条对索引进行定制.

?indextool: 工具程序,用来转储关于索引的多项调试信息。此工具是从版本Coreseek 3.1(Sphinx 0.9.9-rc2)开始加入的。

?mmseg: 工具程序和库,Coreseek用于提供中文分词和词典处理。

1.4. 许可协议

This program is free software; you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See COPYING file for details.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

2

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

If you don't want to be bound by GNU GPL terms (for instance, if you would like to embed Sphinx in your software, but would not like to disclose its source code), please contact the author to obtain a commercial license.

1.5. 作者和贡献者

作者

Coreseek 主要开发人员:

?nzinfo, , HonestQiao,

Sphinx 的最初作者和目前的主要开发人员:

?Andrew Aksyonoff,

贡献者

为Sphinx的开发出过力的人员和他们的贡献如下(以下排名不分先后): ?Robert "coredev" Bengtsson (Sweden), initial version of PostgreSQL data source;

?Len Kranendonk, Perl API

?Dmytro Shteflyuk, Ruby API

此外,还有许多人提出了宝贵的想法、错误报告以及修正。在此一并致谢!对Sphinx/Coreseek所采用依赖和工具软件的作者,在此也表示由衷的感谢与敬意。

1.6. 历史

Coreseek 的开发工作类似Sphinx(起始于2001年),可以上溯到2006年,当时我们试图为一个数据库驱动的网站寻找一个可接受的中文搜索的解决方案,但是当时没有任何方案能够完全而又直接的满足要求。事实上,主要是如下问题:

?搜索质量(例如:类似Google的有效的相关度算法)

3

o单纯的统计学方法的效果非常糟糕,特别是在大量的短篇文档的集合上,例如:论坛、博客等等

?搜索速度

o特别是当搜索的短语包括“停止词”时,表现的尤其明显,例如:"to be or not to be"

?建立索引时,可控的磁盘和CPU消耗

o在现有硬件的环境下,这一点的重要性要超过对索引构造速度的要求.

?中文搜索的准确性和效率

o因为众所周知的原因,只有准确的中文分词才能提高中文搜索的准确性,并大大降低计算量.

通过网络,我们了解到有无数的人存在类似的需求,尔后我们进行了不同途径的探索,尝试了不同的走法,经过了反复的实践,最终选择基于Sphinx、结合MMSeg,开发出Coreseek中文全文检索引擎,并按照GPLv2协议发行,以供企业和个人解决中文搜索问题。

年复一年,其他的解决方案有了很多改进,新的方案也不断涌现,但是,我们一致认为仍然没有一种解决方案足够的好,能让我们抛弃Sphinx将搜索平台迁移过去。

近年来,Sphinx/Coreseek的用户给了我们很多正面的反馈和建议,我们也不断改进和提高,并增加了Python数据源,将Sphinx/Coreseek的应用范围从已知世界扩展到未知世界,其应用场景也达到无限种可能;因此,显而易见的,Sphinx/Coreseek的开发过程将会继续(也许将持续到世界末日)。

2. 安装

2.1. 支持的操作系统

在绝大多数现代的Unix类操作系统(例如Linux、BSD等)上,只需要一个

C++编译器就可以编译并运行Sphinx/Coreseek,而不需要对源码进行任何改动。

目前,Sphinx/Coreseek可以在以下系统上运行:

?Linux 2.4.x, 2.6.x (包括各种发行版,如Redhat、Centos、Debian、OpenSuse等)

?Windows 2000, 2003, XP, Vista, Windows7, Windows2008

?FreeBSD 4.x, 5.x, 6.x, 7.x, 8.x

?NetBSD 1.6, 3.0, 4.x, 5.x

?Solaris 9, 11

?Mac OS X

4

支持的CPU种类包括 X86, X86-64, AMD64, SPARC64。目前经过实际测试可以在主流BSD平台、Linux平台和Windows平台运行,详情可以查看Coreseek测试运行环境列表。

我们希望Sphinx/Coreseek也能够在其他的类Unix操作系统平台上工作,为所有需要解决中文搜索问题的用户服务,如果你运行Sphinx/Coreseek索使用的操作系统不在上面的名单中,请告诉我们(HonestQiao,

)。

目前的阶段,Sphinx/Coreseek的Windows版可用于测试、调试和普通生产环境,但不建议用于负载量较大的生产系统。限于Windows操作系统自身的限制,最突出的两个问题是:1)并发查询的支持不好;2)缺少索引数据热切换的支持。虽然目前已经有用户成功的在生产环境克服了这两个问题,但是我们仍然不推荐在Windows下运行Sphinx/Coreseek提供高强度的搜索服务。我们推荐使用Linux或者BSD作为运行的操作系统平台,并可提供Linux、BSD系统下针对性的系统架构和性能优化支持服务。

2.2. 需要的工具

在类UNIX操作系统平台上,你需要以下的工具用来编译和安装

Sphinx/Coreseek:

?C++编译器。GNU gcc 就能够干这个活.

?make程序。GNU make 就能够干这个活.

?iconv库。GNU libiconv 就能够提供支持.

?Python2.6。Python数据源需要Python2.6的支持.

在Windows平台上,你需要Microsoft Visual C/C++ Studio .NET 2003 or 2005。如果你还需要使用Python数据源,推荐安装ActiveState Python2.6。其他的编译器/开发环境也许也能搞定这件事,但你可能需要自己手工制作他们所需的Makefile或者工程文件。

2.3. 在Linux、BSD上安装Sphinx/Coreseek

1.将你下载的tar包解压,并进入coreseek 子目录:

$ tar xzvf coreseek-3.2.14.tar.gz

$ cd coreseek

2.首先安装MMSeg:

$ cd mmseg

$ ./configure --prefix=/usr/local/mmseg

5

$ make

$ make install

$ cd ..

3.运行配置程序:

$ ./configure

configure程序有很多运行选项。完整的列表可以通过使用 --help 开

关得到。最重要的如下:

?--prefix, 定义将Coreseek安装到何处;比如 --

prefix=/usr/local/coreseek (以下全部示例都假定Coreseek安

装在这个位置)

?--with-mysql, 当自动检测失败时,指出在那里能找到MySQL 头文件和库文件;

?--with-pgsql, 指出在那里能找到PostgreSQL头文件和库文件.

?--with-mmseg, 启用基于MMSeg的中文分词法,并指出在那里能找到MMSeg头文件和库文件.

?--with-python, 启用Python数据源支持. 需要预先安装

Python2.6.

4.编译源代码生成二进制程序:

$ make

5.安装二进制程序到你设定的目录下: (类Unix操作系统下默认为

/usr/local/bin/ , 但是可以被 configure --prefix) 修改安装目录

$ make install

2.4. 在Windows上安装Sphinx/Coreseek

在Windows上安装通常比在Linux环境下容易一些。要不是为了给代码制作patch,一般安装预先编译好的二进制文件即可,它们可以在网站的下载区找到.

1.将你下载的.zip文件解压,比如 coreseek-3.

2.14-win32.zip (或者

coreseek-3.2.13-win32-pgsql.zip 如果你需要PostgresSQL支持.)

Windows XP及其后续版本都可以直接解压.zip压缩包,用免费的解压缩

程序也可,比如 7Zip.

在本教程的其余部分,我们假定上述压缩包被解压到

C:\usr\local\coreseek, 这样 searchd.exe 对应的路径就是

6

C:\usr\local\coreseek\bin\searchd.exe. 如果你打算给安装目录或者配置文件用个不同的路径,请在相应的地方自行修改路径。

2.把 searchd 服务安装成一个Windows服务:

C:\usr\local\coreseek> C:\usr\local\coreseek\bin\searchd.exe --install --config C:\usr\local\coreseek\etc\coreseek.conf --

servicename Coreseek

3.这样 searchd 服务应该出现在“控制面板->系统管理->服务”的列表中

了. 服务应该出现在“控制面板->系统管理->服务”的列表中了,但还

没有被启动,因为在启动它之前,我们还需要做些配置并用indexer建

立索引 . 这些可以参考快速入门教程.

2.5. 已知的安装问题和解决办法

如果 configure 程序没有找到MySQL 的头文件和库文件, 请试试检查是否安装了 mysql-devel 或者 mysql-client 依赖包. 在有些系统上,默认安装包括这个包. 类似如此,libiconv等也可能会有类似的提示。

如果 make 程序给出如下错误提示

/bin/sh: g++: command not found

make[1]: *** [libsphinx_a-sphinx.o] Error 127

请检查是否安装了 gcc-c++ 包.

如果你在编译时得到如下错误

sphinx.cpp:67: error: invalid application of `sizeof' to incomplete type `Private::SizeError'

这意味着某些编译时的类型检查失败了,一个最有可能的原因是在你的系统上类型off_t的长度小于64bit。一个快速的修复手段是,你可以修改

src/sphinx.h ,将在定义类型SphOffset_t 处,将off_t 替换成DWORD,需要注意,这种改动将使你的全文索引文件不能超过2GB。即便这种修改有用,也请汇报这一问题,在汇报中请包括具体的错误信息以及操作系统编译器的配置情况。这样,我们可能能够在下一个版本中解决这一问题。

如何你遇到了其他的任何问题,或者前面的建议对你没有帮助,别犹豫,请立刻联系我们.

2.6. Sphinx/Coreseek快速入门教程

7

以下所有的例子都假设你将Sphinx/Coreseek安装在目录

/usr/local/coreseek, 并且 searchd 对应的路径为

/usr/local/coreseek/bin/searchd.

为了使用Sphinx/Coreseek,你需要:

1.创建配置文件.

缺省的配置文件名为 csft.conf. 全部的Sphinx/Coreseek提供的程序

默认都在当前工作的目录下寻找该文件.

由configure 程序生成的示例配置文件sphinx.conf.dist 中包括全部

选项的注释,复制并编辑这个文件使之适用于你的具体情况: (请确认

Sphinx/Coreseek 安装在 /usr/local/coreseek/)

$ cd /usr/local/coreseek/etc

$ cp sphinx.conf.dist csft.conf

$ vi csft.conf

在示例配置文件中,将试图对MySQL数据库test中的 documents 表建

立索引;因此在这里还提供了 example.sql 用于给测试表增加少量数据用于测试:

$ mysql -u test < /usr/local/coreseek/etc/example.sql

2.运行indexer 为你的数据创建全文索引:

$ cd /usr/local/coreseek/etc

$ /usr/local/coreseek/bin/indexer --all

3.检索你新创建的索引!

你可以使用search(注意,是search而不是searchd)实用程序从命令行对索引进行检索:

$ cd /usr/local/coreseek/etc

$ /usr/local/coreseek/bin/search test

如果要从PHP脚本检索索引,你需要:

1.运行守护进程searchd,PHP脚本需要连接到searchd上进行检索:

$ cd /usr/local/coreseek/etc

$ /usr/local/coreseek/bin/searchd

8

2.运行PHP API 附带的test 脚本(运行之前请确认searchd守护进程已

启动):

$ cd /源代码目录/coreseek/api

$ php test.php test

3.将API文件(位于api/sphinxapi.php) 包含进你自己的脚本,开始编程. 祝你搜索愉快!

3. 建立索引

3.1. 数据源

索引的数据可以来自各种各样不同的来源:SQL数据库、纯文本、HTML文件、

邮件等等。从Sphinx/Coreseek的视角看,索引数据是一个结构化的文档的集合,其中每个文档是字段的集合,这和SQL数据库的视角有所不同,在那里,

每一行代表一个文档,每一列代表一个字段。

由于数据来源的不同,需要不同的代码来获取数据、处理数据以供

Sphinx/Coreseek进行索引的建立。这种代码被称之为数据源驱动程序(简

称:驱动或数据源)。

在本文撰写时,Sphinx/Coreseek中包括MySQL和PostgreSQL数据源的驱动程序,这些驱动使用数据库系统提供的C/C++原生接口连接到数据库服务器并获

取数据。此外,Sphinx/Coreseek还提供了额外的被称为xmlpipe的数据源驱

动,该驱动运行某个具体的命令,并从该命令的stdout中读入数据。数据的格

式在Section 3.8, “xmlpipe 数据源”中有介绍。经过发展,Coreseek还

提供了具有特色的Python数据源驱动,可以使用Python编写数据获取脚本自

定义数据源,从而得以获取任何已知世界和未知世界的数据。

如果确有必要,一个索引的数据可以来自多个数据源。这些数据将严格按照配

置文件中定义的顺序进行处理。所有从这些数据源获取到的文档将被合并,共

同产生一个索引,如同他们来源于同一个数据源一样。

3.2. 属性

属性是附加在每个文档上的额外的信息(值),可以在搜索的时候用于过滤和

排序。

搜索结果通常不仅仅是进行文档的匹配和相关度的排序,经常还需要根据其他

与文档相关联的值,对结果进行额外的处理。例如,用户可能需要对新闻检索

结果依次按日期和相关度排序,检索特定价格范围内的产品,检索某些特定用

户的blog日志,或者将检索结果按月分组。为了高效地完成上述工作,Sphinx

9

允许给文档附加一些额外的属性,并把这些值存储在全文索引中,以便在对全文匹配结果进行过滤、排序或分组时使用。

属性与字段不同,不会被全文索引。他们仅仅是被存储在索引中,属性进行全文检索式不可能的。如果要对属性进行全文检索,系统将会返回一个错误。

例如,如果column被设置为属性,就不能使用扩展表达式@column 1去匹配column为1的文档;如果数字字段按照普通的方式被索引,那么就可以这样来匹配。

属性可用于过滤,或者限制返回的数据,以及排序或者结果分组; 也有可能是完全基于属性排序的结果, 而没有任何搜索相关功能的参与. 此外, 属性直接从搜索服务程序返回信息, 而被索引的文本内容则没有返回.

论坛帖子表是一个很好的例子。假设只有帖子的标题和内容这两个字段需要全文检索,但是有时检索结果需要被限制在某个特定的作者的帖子或者属于某个子论坛的帖子中(也就是说,只检索在SQL表的author_id和forum_id这两个列上有特定值的那些行),或者需要按post_date列对匹配的结果排序,或者根据post_date列对帖子按月份分组,并对每组中的帖子计数。

为实现这些功能,可以将上述各列(除了标题和内容列)作为属性做索引,之后即可使用API调用来设置过滤、排序和分组。以下是一个例子:

示例: sphinx.conf 片段:

...

sql_query = SELECT id, title, content, \

author_id, forum_id, post_date FROM my_forum_posts sql_attr_uint = author_id

sql_attr_uint = forum_id

sql_attr_timestamp = post_date

...

示例:应用程序代码 (PHP):

// only search posts by author whose ID is 123

$cl->SetFilter ( "author_id", array ( 123 ) );

// only search posts in sub-forums 1, 3 and 7

$cl->SetFilter ( "forum_id", array ( 1,3,7 ) );

// sort found posts by posting date in descending order $cl->SetSortMode ( SPH_SORT_ATTR_DESC, "post_date" );

可以通过名字来指示特定的属性,并且这个名字是大小写无关的(注意:直到目前为止,Sphinx还不支持中文作为属性的名称)。属性并不会被全文索引,他们只是按原封不动的存储在索引文件中。目前支持的属性类型如下:

10

?无符号整数(1-32位宽);

?UNIX 时间戳(timestamps);

?浮点值(32位,IEEE 754单精度);

?字符串序列 (尤其是计算出的整数值);

?多值属性 MVA( multi-value attributes ) (32位无符号整型值的变长序列).

由各个文档的全部的属性信息构成了一个集合,它也被称为文档信息docinfo. 文档信息可以按如下两种方式之一存储:

?λ与全文索引数据分开存储(“外部存储”,在.spa文件中存储), 或者

?λ在全文索引数据中,每出现一次文档ID 就出现相应的文档信息(“内联存储”,在.spd文件中存储)

当采用外部存储方式时,searchd总是在RAM中保持一份.spa文件的拷贝(该文件包含所有文档的所有文档信息)。这是主要是为了提高性能,因为磁盘的随机访问太慢了。相反,内联存储并不需要任何额外的RAM,但代价是索引文

件的体积大大地增加了;请注意,全部属性值在文档ID出现的每一处都被复制了一份,而文档ID出现的次数恰是文档中不同关键字的数目。仅当有一个很小的属性集、庞大的文本数据集和受限的RAM时,内联存储才是一个可考虑的选择。在大多数情况下,外部存储可令建立索引和检索的效率都大幅提高。

检索时,采用外部存储方式产生的的内存需求为

(1+number_of_attrs)*number_of_docs*4字节,也就是说,带有两个属性和一个时间戳的1千万篇文档会消耗(1+2+1)*10M*4 = 160 MB的RAM。这是每个检索的守护进程(PER DAEMON)消耗的量,而不是每次查询,searchd仅在启动

时分配160MB的内存,读入数据并在不同的查询之间保持这些数据。子进程并不会对这些数据做额外的拷贝。

3.3. MVA (多值属性)

多值属性MVA (multi-valued attributes)是文档属性的一种重要的特例,MVA 使得向文档附加一系列的值作为属性的想法成为可能。这对文章的tags,产品类别等等非常有用。MVA属性支持过滤和分组(但不支持分组排序)。

目前MVA列表项的值被限制为32位无符号整数。列表的长度不受限制,只要有足够的RAM,任意个数的值都可以被附加到文档上(包含MVA值的.spm文件会被searchd预缓冲到RAM中)。MVA的源数据来源既可以是一个单独的查询,

也可以是文档属性,参考sql_attr_multi中的来源类型。在第一种情况中,

该查询须返回文档ID和MVA值的序对;而在第二种情况中,该字段被分析为整型值。对于多值属性的输入数据的顺序没有任何限制,在索引过程中这些值会自动按文档ID分组(而相同文档ID下的数据也会排序)。

11

本文来源:https://www.bwwdw.com/article/dkfl.html

Top