如何排除在SOLR查询字段(How to exclude fields in a SOLR quer

2019-08-31 13:54发布

我有一个SOLR查询应取我储存的所有字段,除了一个领域。
说我有20场,我需要硬编码的19个领域我想在获取
&fl=[f],[f],[f],....[f]'
或者是有没有办法做同样的事情来
&fl=*,![f]'

[f]表示的字段名称。

Answer 1:

不幸的是通过查询字符串删除字段名的能力仍然是一个出色的改进要求。 请参阅SOLR-3191的更多细节。

直到这个改进被实施,则需要指定要在所有19场fl参数。 但是,您可以更新您的默认/select requestHandler定义要返回的,除非它是在查询字符串覆盖将被应用于所有查询默认设置的19个领域。

这是默认的修改版/select从例如solrconfig.xml中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更多详细信息,请参阅在SolrConfig RequestHandlers和SearchComponents 。



Answer 2:

另一种选择可能是:您想包括应该共享一个共同的前缀领域; 重要的是,你可以在你的FL使用水珠顶部。 因此,例如,假设前缀为tobeincluded_你可以有一个像FL值

tobeincluded_ *



Answer 3:

另一种选择是使用文档变压器ValueAugmenterFactory以取代一个空字符串返回的字段的实际值。

如果您的要求很简单,就是避免返回该字段的内容这应该工作。

下面是一个例子更换标题字段的内容:

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


Answer 4:

还有另一个可用简单的补丁在这里解决的简单情况: https://issues.apache.org/jira/browse/SOLR-9467如果接受了它的工作是这样的:

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

要删除标题字段。



文章来源: How to exclude fields in a SOLR query