How to exclude fields in a SOLR query

2019-04-06 07:17发布

问题:

I have a SOLR query which should fetch all the fields I store, except one field.
Say I have 20 fields, do I need to hard code the 19 fields I want to fetch in the
&fl=[f],[f],[f],....[f]'
Or is there a way to do something similar to
&fl=*,![f]'

[f] stands for a field name.

回答1:

Unfortunately the ability to remove a field name via the query string is still an outstanding improvement request. Please see SOLR-3191 for more details.

Until this improvement is implemented, you will need to specify all 19 fields in the fl parameter. However, you could update your default /select requestHandler to define the 19 fields that you want to return as a default setting that would be applied to all queries unless it was overridden in the query string.

Here is a modified version of the default /select requestHandler from the example solrconfig.xml:

  <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>

For more details about these default settings and requestHandler configuration, please refer to RequestHandlers and SearchComponents in SolrConfig.



回答2:

Another option could be: fields you want to include should share a common prefix; on top of that you can use globs in your fl. So for example, assuming that prefix is tobeincluded_ you can have a fl value like

tobeincluded_*



回答3:

Another option would be using the Document transformer ValueAugmenterFactory to replace the actual value returned of the field by an empty string.

This should work if your requirement is simply to avoid returning the content of that field.

Below is a example replacing the content of the title field:

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


回答4:

There is another simpler patch available that solves the simple case here: https://issues.apache.org/jira/browse/SOLR-9467 if accepted it will work like this:

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

To remove the title field.