0

在露天,我需要编写一个 lucene 查询,这样它必须在搜索时从内容中消除/排除 xml 标签。

示例 如果针对内容搜索文件 try.xml,我的搜索不应搜索 xml 标记。

try.xml
<sample>This is an example</sample>

如果我将搜索文本指定为“sample”,则不应返回文件名“try.xml”。那么我怎么能做到这一点呢?

编辑

我已尝试使用以下查询,但没有任何变化。

@cm\:name:"try*" -TEXT:"<*>" +TEXT:"sample"

上面的查询有什么问题。我只是试图获取以“try”开头的文件名并消除标签内的文本,并尝试搜索文本“sample”。

4

3 回答 3

1

默认情况下,Alfresco 将 XML 文件视为纯文本并将 xml 标签作为单词进行索引,这就是为什么可以通过全文搜索找到它们的原因。XML 内容由 Alfresco 中的 StringExtractingContentTransformer 处理,它在索引之前将 text/xml 转换为 text/plain。

要检查在您的 Alfresco 安装中注册了哪些转换器,您可以检查 http://localhost:8080/alfresco/service/mimetypes?mimetype=text/xml#text/xml

为了防止 xml 属性的索引,您必须编写一个特殊的转换器来去除 XML 标记。有关使用 Alfresco 进行内容转换的介绍,请参阅http://wiki.alfresco.com/wiki/Content_Transformations。最简单的方法是集成一个将 xml 文件转换为文本的命令行实用程序,或者您可以实现一个执行转换的 java 类。

于 2011-04-06T11:10:01.517 回答
0

你不能只排除 xml mimetype 吗?(有关语法,请参见http://wiki.alfresco.com/wiki/Search#Finding_nodes_by_content_mimetype )

我猜你可能也想排除 html(所以你会排除 text/html 和 text/xml),这会阻止你在结果中获得任何包含 xml 标签的节点。

于 2011-04-02T10:32:13.047 回答
0

没有标准的方法来做你需要的,这里是官方文档的摘录:

通配符查询 使用 * 和 ? 的通配符查询 是作为术语和短语的支持。对于标记化的字段,模式匹配不能精确,因为所有非标记字符(空格、标点符号等)都将丢失并被视为相等。

基本上,尖括号在默认情况下会被去掉。您需要破解索引和查询解析过程以启用您想要的行为。

于 2011-03-25T08:54:02.667 回答