Lucene查询消除了全文搜索中的xml标记

时间:2011-03-23 06:36:17

标签: lucene full-text-search alfresco

在露天,我需要编写一个lucene查询,以便在搜索时从内容中消除/排除xml标记。

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

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

如果我将搜索文本作为“sample”,则不应返回文件名“try.xml”。 那么我怎么能实现这个目标呢?

编辑

我尝试过以下查询而没有变化。

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

上述查询出错了。我只是试图获取以“try”开头的文件名,并删除标签内的文本,并尝试搜索文本“sample”。

3 个答案:

答案 0 :(得分: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类。

答案 1 :(得分:0)

没有标准的方法来做你需要的,这里是official documentation的摘录:

  

通配符查询通配符查询   使用*和?作为条款和支持   短语。对于标记化字段   模式匹配并不像所有人一样精确   非令牌字符(空格,   标点符号等将丢失   并视为平等。

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

答案 2 :(得分:0)

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

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