【问题标题】:How to exclude fields in a SOLR query如何在 SOLR 查询中排除字段
【发布时间】:2013-04-19 16:28:23
【问题描述】:

我有一个 SOLR 查询,它应该获取我存储的所有字段,除了一个字段。
假设我有 20 个字段,我是否需要在
&fl=[f],[f],[f],....[f]'
中硬编码我想要获取的 19 个字段 或者有没有办法做类似于
&fl=*,![f]'

[f] 代表字段名。

【问题讨论】:

    标签: solr solr-query-syntax


    【解决方案1】:

    不幸的是,通过查询字符串删除字段名称的功能仍然是一项未完成的改进请求。详情请见SOLR-3191

    在实现此改进之前,您需要在 fl 参数中指定所有 19 个字段。但是,您可以更新您的默认 /select requestHandler 以定义您想要返回的 19 个字段作为将应用于所有查询的默认设置,除非它在查询字符串中被覆盖。

    这是来自示例 solrconfig.xml 的默认 /select requestHandler 的修改版本:

      <requestHandler name="/select" class="solr.SearchHandler">
        <!-- default values for query parameters can be specified, these
         will be overridden by parameters in the request
         -->
        <lst name="defaults">
          <str name="echoParams">explicit</str>
          <int name="rows">10</int>
          <str name="df">text</str>
          <!-- Only showing 3 fields for this example -->
          <str name="fl">field1,field2,field3</str>
        </lst>
      </requestHandler>
    

    有关这些默认设置和 requestHandler 配置的更多详细信息,请参阅RequestHandlers and SearchComponents in SolrConfig

    【讨论】:

    • 我希望有这个功能。
    【解决方案2】:

    另一个选项可能是:您想要包含的字段应该共享一个公共前缀;最重要的是,你可以在你的 fl 中使用 glob。因此,例如,假设要包含前缀_,您可以有一个 fl 值,例如

    待包含_*

    【讨论】:

      【解决方案3】:

      另一种选择是使用Document transformer ValueAugmenterFactory 将字段返回的实际值替换为空字符串。

      如果您的要求只是避免返回该字段的内容,这应该可以工作。

      以下是替换标题字段内容的示例:

      &fl=*,title:[value v=""]
      

      【讨论】:

        【解决方案4】:

        还有另一个更简单的补丁可以解决这里的简单情况:https://issues.apache.org/jira/browse/SOLR-9467 如果被接受,它将像这样工作:

        &fl=*,[fl.rm v="title"]
        

        删除标题字段。

        【讨论】:

        • 免责声明:我应该提到我写了那个补丁。
        • 让我们知道何时/是否被接受。我不熟悉 Lucen/SOLR 架构,但您不能将其发布为可以放置到位的独立插件吗?
        • 我认为可以打包主类并在请求处理程序配置中使用它,但要让它显示在 &amp;fl 中使用,我必须将名称添加到solr 中的类。但是,截至昨天,该补丁完全适用于 6.2 分支,因此,如果您从 apache git apply 中检查并在 solr 目录中使用 ant create-package 构建,应该创建与添加此内容的 6.2 RC1 基本相同的 tarball。
        • 投反对票??补丁从未进行过,因为据说 3191 已经“完成并准备就绪”(我实际上计划很快查看并推动 3191),但它确实有效。
        猜你喜欢
        • 1970-01-01
        • 2020-11-24
        • 2015-09-06
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        • 1970-01-01
        相关资源
        最近更新 更多