8.2.1. type
索引类型。可选选项,默认值为空(索引为简单本地索引)。可用的值包括空字符串或 “distributed”
Sphinx支持两种不同的索引类型:本地——在本机上存储和处理,和远程——不仅涉及">本地搜索,而且同时通过网络向远程searchd实力做查询。索引类似选项使您可以选择使用何种索引。索引默认是本地型。指定“distributed”索引类型会运行分布式搜索,参看 节 4.7, “分 布式搜索”
示例:
type = distributed
8.2.2. source
向本地索引增加文档源。可以出现多次,必须选项。
为当前索引指定一个从中可以获取文档的文档源。必须至少有一个文档源。可以有多个文档源,任何数据源类型都可接受:即您可以从MySQL服务器中获取一部分数据,从 PostgreSQL中获取另一部分,再在文件系统上使用 xmlpipe2 wrapper获取一部分。
然而,对源数据却有一些限制。首先,文档ID必须在所有源的总体上是唯一的。如果这个条件不满足,那可能导致非预期的搜索结果。其次,源的模式必须相同,以便在同一个索引中存储。
数据来源的ID不会被自动存储。因此,为了获知匹配的文档是从哪个数据源中来的,需要手工存储一些额外的信息。通常有两种方法:
1.修改文档ID,将源ID编码进去:
source src1 { sql_query = SELECT id*10+1, ... FROM table1 ... }
source src2 { sql_query = SELECT id*10+2, ... FROM table2 ... }
2.将数据来源存储为一个属性
source src1 { sql_query = SELECT id, 1 AS source_id FROM table1 sql_attr_uint = source_id ... }
source src2 { sql_query = SELECT id, 2 AS source_id FROM table2 sql_attr_uint = source_id ... }
示例:
source = srcpart1
source = srcpart2
source = srcpart3
8.2.3. path
索引文件的路径和文件名(不包括扩展名)。必须选项。
path既包括文件夹也包括文件名,但不包括扩展名。indexer在产生永久和临时索引文件的最终名字时会附加上不同的扩展名。永久数据文件有几个不同的扩展名,都以“.sp”开头,临时文件的扩展名以“.tmp”开头。如果indexer没有成功地自动删除.tmp*文件,手工删除是安全的。
以下是不同索引文件所存储的数据种类,供参考:
.spa存储文档属性(仅在extern_docinfo存储模式中使用) ?
.spd存储每个词 ID可匹配的文档ID列表 ?
.sph存储索引头信息 ?
.spi存储词列表(词 ID和指向.spd文件的指针)
.spm存储MVA数据
.spp存储每个词 ID的命中(或者说记账,或者词的出现)列表
示例:
path = /var/data/test1
8.2.4. docinfo
文档信息(docinfo)的存储模式。可选选项,默认是“extern”已知的值包括'none', 'extern'和 'inline'.
此选项确切定义了文档信息在磁盘和RAM中的物理存储方式。“none”意思是根本不存储文档信息(没有任何属性)。通常并不需要显式设置为“none”因为当没有配置任何属性时 Sphinx会自动选择“none”。“inline”代表文档信息与文档ID列表一同存储在在.spd文件中。 “extern”代表文档信息与文档ID分开(在外部)存储(在.spa文件中)。
基本上,外部存储的文档信息在查询时必须保持在内存中。这是性能的原因。因此8630.html">有时候 “inline”是唯一的选择。然而这种情况并不多见,文档信息默认是“extern”存储的。深入的探讨和RAM使用的估计请参见 节 3.2, “属性” 。
示例:
docinfo = inline
8.2.5. mlock
已缓冲数据的内存锁定。可选选项,默认为0(不调用mlock())
为提高性能,searchd将.spa和.spi文件预取到内存中,并一直在内存中保存它们的拷贝。但如果一段时间内没有对该索引的搜索,则对这份缓冲的拷贝没有内存访问,而操作系统可能会决定将它交换到磁盘上去。对这些“冷却”了的索引的访问会导致其交换回内存并得到一个较大的延迟。
将 mlock选项设置为1会使Sphinx使用mlock(2)系统调用将存储上述缓冲了的数据的系统内存锁定,这将避免内存交换(详情参见 man 2 mlock)。mlock(2)是特权调用,因此可能需要 searchd以root账户运行或通过其他办法赋予足够的权限。如果mlock()失败会发出警告,但索引会继续进行。
示例:
mlock = 1
8.2.6. morphology
词形处理器的列表。可选选项,默认为空(不使用任何词形处理器)。
词形处理器可以将待索引的词从各种形态变成基本的规则的形态。例如,英语词干提取器(English stemmer)可以将“dogs”和“dog”都变成“dog”,这使搜索这两个词的结果都相同。
内置的词形处理器包括英语词干提取器,俄语词干提取器(支持UTF-8和Windows-1251编码),Soundex和Metaphone。后面两个会将词替换成特殊的语音编码,这会使发音相近的词表示形式相同 。Snowball项目的 libstemmer库提供的额外 词干提取器可以通过在编译期对configure脚本使用—with-libstemmer选项来启用。内建的英语和俄语词干提取器要比它们在 libstemmer中的对应物运行更快,但它们的结果可能略有不同,因为内建的版本基于较旧的版本。Metaphone基于 Double Metaphone算法实现。
在morphology选项中可使用的内建值包括“none”,“stem_en”,“stem_ru”,“stem_enru”, “soundex”和“metaphone”。libstemmer提供的额外值格式为“libstemmer_XXX”,XXX指 libstemmer算法的代号。(完整列表参见 libstemmer_c/libstemmer/modules.txt)
可以指定多个词干提取器(以逗号分隔)。这些提取器按列出的顺序应用于输入词串,整个处理会在第一个真正修改了原词的词干提取器之后停止。另外,当 wordforms 特性启用时,词会现在词形字典中查询,如果词典中有对应的条目,那么词干提取器干脆不会被使用。换个说法, wordforms 选项可以用来补充指定词干提取器的例外情况。
示例:
morphology = stem_en, libstemmer_sv