我正在使用eXist-db构建一个应用程序,它可以处理TEI文件并将它们转换为html。
对于搜索功能,我将lucene配置为忽略某些标记。
<collection xmlns="http://exist-db.org/collection-config/1.0" xmlns:teins="http://www.tei-c.org/ns/1.0">
<index xmlns:xs="http://www.w3.org/2001/XMLSchema">
<fulltext default="none" attributes="false"/>
<lucene>
<analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
<analyzer id="ws" class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
<text match="//teins:TEI">
<inline qname="p"/>
<inline qname="text"/>
<ignore qname="teins:del"/>
<ignore qname="teins:sic"/>
<ignore qname="teins:index"/>
<ignore qname="teins:term"/>
<ignore qname="teins:note"/>
</text>
</lucene>
</index>
</collection>
嗯,这样做有点,元素不会直接显示在搜索结果中,而是出现在匹配文本之前和之后的片段中,这些片段由kwic模块返回。有没有办法在索引之前删除它们或应用XSL转换?
示例TEI:
...daß er sie zu entwerten sucht. Wie
<index>
<term>Liebe</term>
<index>
<term>und Hass</term>
</index>
</index>
Liebe Ausströmung inneren Wertes ist,...
当我搜索“Ausströmung”时,查询结果为
....sucht. Wie Liebe und Hass Liebe Ausströmung inneren Wertes ist,...
但应该导致
....sucht. Wie Liebe Ausströmung inneren Wertes ist,...
当我搜索“Hass”时,此文本代码段不会显示在结果中。
对于搜索功能:我严格遵守文档中的莎士比亚示例。
答案 0 :(得分:2)
让我们来看看eXist-db的莎士比亚应用程序。假设你有索引条目。您不希望索引术语中的命中 - 这是索引配置的处理 - 但您也不希望它们输出到KWIC显示 - 您必须自己编码。
如果查看app.xql,您会看到有一个名为app:filter的函数来自app:show-hits。这可以用来根据输出的文本节点的父节点的名称删除部分输出到KWIC显示。
这将给你想要的东西:
declare %private function app:filter($node as node(), $mode as xs:string) as xs:string? {
let $ignored-elements := doc('/db/system/config/db/apps/shakespeare/collection.xconf')//*:ignore/@qname/string()
let $ignored-elements :=
for $ignored-element in $ignored-elements
let $ignored-element := substring-after($ignored-element, ':')
return $ignored-element
return
if (local-name($node/parent::*) = ('speaker', 'stage', 'head', $ignored-elements))
then ()
else
if ($mode eq 'before')
then concat($node, ' ')
else concat(' ', $node)
};
你当然可以硬编码要忽略的元素,如('speaker', 'stage', 'head', 'sic', 'term', 'note')
(这里不需要'index',因为你必须总是使用'term'),但我想表明你没有至。但是,如果你不对要忽略的元素进行硬编码,你当然应该将$ ignored-elements的赋值从函数中移出,例如移动到查询序言中声明的变量,因此数据库(collection.xconf)会不会为你遇到的每个文本节点调用:这真的很愚蠢,但为了简单起见,我已将所有功能放在一个函数中。
PS:名称空间前缀可以是您选择的任何内容,但http://www.tei-c.org/ns/1.0名称空间的标准名称空间前缀是“tei”,将其更改为“teins”只会导致混淆。