在露天,我需要编写一个lucene查询,以便在搜索时从内容中消除/排除xml标记。
示例如果针对内容搜索文件try.xml,则我的搜索不应搜索xml标记。
try.xml
<sample>This is an example</sample>
如果我将搜索文本作为“sample”,则不应返回文件名“try.xml”。 那么我怎么能实现这个目标呢?
编辑
我尝试过以下查询而没有变化。
@cm\:name:"try*" -TEXT:"<*>" +TEXT:"sample"
上述查询出错了。我只是试图获取以“try”开头的文件名,并删除标签内的文本,并尝试搜索文本“sample”。
答案 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标签的任何节点。