11

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

[f]代表字段名称。

4

4 回答 4

15

不幸的是,通过查询字符串删除字段名称的能力仍然是一个突出的改进请求。有关详细信息,请参阅SOLR-3191 。

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

这是示例 solrconfig.xml 中默认/selectrequestHandler 的修改版本:

  <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 配置的更多详细信息,请参阅SolrConfig 中的 RequestHandlers 和 SearchComponents

于 2013-04-19T17:24:16.403 回答
7

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

被包括_*

于 2015-06-28T20:23:04.677 回答
2

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

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

下面是一个替换标题字段内容的示例:

&fl=*,title:[value v=""]
于 2016-10-07T21:25:58.647 回答
0

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

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

删除标题字段。

于 2016-09-02T21:15:25.450 回答