如何排除SOLR查询中的字段

时间:2013-04-19 16:28:24

标签: solr solr-query-syntax

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

[f]代表字段名称。

4 个答案:

答案 0 :(得分:14)

不幸的是,通过查询字符串删除字段名称的能力仍然是一项出色的改进请求。有关详细信息,请参阅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

答案 1 :(得分:6)

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

这样的fl值

tobeincluded _ *

答案 2 :(得分:1)

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

如果您的要求只是为了避免返回该字段的内容,这应该有效。

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

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

答案 3 :(得分:0)

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

setTimeout(heartbeat(heartbeaturl), data.time);

删除标题字段。