【问题标题】:Lucene query that eliminates xml tags in full text search在全文搜索中消除 xml 标记的 Lucene 查询
【发布时间】:2011-03-23 06:36:17
【问题描述】:

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

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

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

如果我将搜索文本指定为“sample”,则不应返回文件名“try.xml”。 那么我该如何实现呢?

编辑

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

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

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

【问题讨论】:

    标签: lucene full-text-search alfresco


    【解决方案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 类。

    【讨论】:

      【解决方案2】:

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

      通配符查询 通配符查询 使用 * 和 ?是支持条款和 短语。对于标记化字段 模式匹配不能完全准确 非标记字符(空格, 标点符号等)将丢失 并平等对待。

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-11
          • 2011-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-21
          • 1970-01-01
          • 2014-07-11
          相关资源
          最近更新 更多