[英]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.