[英]How to exclude fields in a SOLR query
我有一个SOLR查询,它应该获取我存储的所有字段,除了一个字段。
假设我有20个字段,我是否需要对我想要获取的19个字段进行硬编码
&fl=[f],[f],[f],....[f]'
或者有办法做类似的事情
&fl=*,![f]'
[f]
代表字段名称。
不幸的是,通过查询字符串删除字段名称的能力仍然是一个出色的改进请求。 有关详细信息,请参阅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配置的更多详细信息,请参阅SolrConfig中的RequestHandlers和SearchComponents 。
另一种选择可能是:您想要包含的字段应该共享一个共同的前缀; 最重要的是,你可以在你的fl中使用globs。 因此,例如,假设前缀为toincincluded_,您可以使用类似的fl值
被包括_*
另一种选择是使用Document变换器ValueAugmenterFactory将字段返回的实际值替换为空字符串。
如果您的要求只是为了避免返回该字段的内容,那么这应该有效。
下面是替换title字段内容的示例:
&fl=*,title:[value v=""]
还有另一个更简单的补丁可以解决这里的简单案例: https : //issues.apache.org/jira/browse/SOLR-9467如果被接受它会像这样工作:
&fl=*,[fl.rm v="title"]
删除标题字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.