3.9.xmlpipe2 数据源
xmlpipe2使你可以用另一种自定义的XML格式向Sphinx传输任意文本数据和属性数据。数据模式(即数据字段的集合或者属性集)可以由XML流本身指定,也可以在配置文件中数据源的配置部分中指定。
在对xmlpipe2数据源做索引时,索引器运行指定的命令,打开一个连接到前述命令标准输出的管道,并等待接受具有正确格式的XML数据流。以下是一个数据流的样本:
Example3.xmlpipe2 文档流
<?xml version="1.0" encoding="utf-8"?> <sphinx:docset> <sphinx:schema> <sphinx:field name="subject"/> <sphinx:field name="content"/> <sphinx:attr name="published" type="timestamp"/> <sphinx:attr name="author_id" type="int" bits="16" default="1"/> </sphinx:schema> <sphinx:document id="1234"> <content>this is the main content <![CDATA[[and this <cdata> entry must be handled properly by xml parser lib]]></content> <published>1012325463</published> <subject>note how field/attr tags can be in <b class="red">randomized</b> order</subject> <misc>some undeclared element</misc> </sphinx:document> <!-- ... more documents here ... --> </sphinx:docset>
任意多的数据字段和属性都是允许的。数据字段和属性在同一文档元素中出现的先后顺序没有特别要求。。单一字段数据的最大长度有限制,超过2MB的数据会被截短到2MB(但这个限制可以在配置文件中数据源部分中修改)。
XML数据模式(Schema),即数据字段和属性的完整列表,必须在任何文档被分析之前就确定。这既可以在配置文件中用xmlpipe_field
和xmlpipe_attr_XXX
选 项指定,也可以就在数据流中用<sphinx:schema>元素指定。 <sphinx:schema>元素是可选的,但如果出现,就必须是<sphinx:docset>元素的第一个子元素。如果没 有在数据流中内嵌的数据模式定义,配置文件中的相关设置就会生效,否则数据流内嵌的设置被优先采用。
未知类型的标签(既不是数据字段,也不是属性的标签)会被忽略,但会给出警告。在上面的例子中,<misc>标签会被忽略。所有嵌入在其他标签中的标签及其属性都会被无视(例如上述例子中嵌入在<subject>标签中的<b>标签)
支持输入数据流的何种字符编码取决于系统中是否安装了iconv
. xmlpipe2是用libexpat
解析器解析的,该解析器内置对 US-ASCII, UTF-8, UTF-8 和一些 UTF-16 变体的支持. Sphinx/Coreseek的configure
脚本也会检查libiconv
是否存在并使用它来处理其他的字符编码。libexpat
也隐含的要求在Sphinx/Coreseek端使用UTF-8,因为它返回的分析过的数据总是UTF-8的。
xmlpipe2可以识别的XML元素(标签)(以及前述元素可用的属性)如下:
- sphinx:docset
- 顶级元素,用于标明并包括xmlpipe2文档.
- sphinx:schema
- 可选元素,它要么是sphinx:docset的第一个子元素,要么干脆不出现。声明文档的模式。包括数据字段和属性的声明。若此元素出现,则它会覆盖配置文件中对数据源的设定.
- sphinx:field
- 可选元素,sphinx:schema的子元素。声明一个全文数据字段。唯一可识别的属性是“name”,它指定了字段的名称,后续数据文档中具有此名称的元素的数据都被当作待检索的全文数据对待.
- sphinx:attr
- O可选元素,sphinx:schema的子元素。用于声明具体属性。其已知的属性有:
- "name",设定该属性名称,后续文档中具有该名称的元素应被当作一个属性对待。.
- "type",设定该属性的类型。可能的类型包括 "int", "timestamp", "str2ordinal", "bool", "float" 和 "multi".
- "bits",设定“int”型属性的宽度,有效值为1到32.
- "default",设定该属性的默认值,若后续文档中没有指定这个属性,则使用此默认值。
- sphinx:document
- 必须出现的元素,必须是 sphinx:docset的子元素。包含任意多的其他元素,这些子元素带有待索引的数据字段和属性值,而这些数据字段或属性值既可以是用 sphinx:field和sphinx:attr元素声明的,也可以在配置文件中声明。唯一的已知属性是“id”,它必须包含一个唯一的整型的文档 ID。