Как исключить поля в запросе SOLR
У меня есть запрос SOLR, который должен извлечь все поля, которые я храню, кроме одного поля.
Скажем, у меня есть 20 полей, мне нужно жестко закодировать 19 полей, которые я хочу получить в&fl=[f],[f],[f],....[f]'
Или есть способ сделать что-то похожее на&fl=*,![f]'
[f]
обозначает имя поля.
4 ответа
К сожалению, возможность удалить имя поля с помощью строки запроса все еще остается невыполненным запросом на улучшение. Пожалуйста, смотрите SOLR-3191 для более подробной информации.
Пока это улучшение не будет реализовано, вам нужно будет указать все 19 полей в fl
параметр. Тем не менее, вы можете обновить свой по умолчанию /select
requestHandler для определения 19 полей, которые вы хотите вернуть в качестве настройки по умолчанию, которая будет применяться ко всем запросам, если она не была переопределена в строке запроса.
Вот модифицированная версия по умолчанию /select
requestHandler из примера 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>
Для получения более подробной информации об этих настройках по умолчанию и конфигурации requestHandler, пожалуйста, обратитесь к http://docs.lucidworks.com/display/solr/RequestHandlers+and+SearchComponents+in+SolrConfig.
Другой вариант может быть следующим: поля, которые вы хотите включить, должны иметь общий префикс; Кроме того, вы можете использовать шарики в вашем fl. Так, например, предполагая, что префикс tobeincluded_, вы можете иметь значение fl как
быть включенным_*
Другим вариантом будет использование преобразователя документа ValueAugmenterFactory для замены возвращаемого фактического значения поля пустой строкой.
Это должно работать, если вы просто хотите избежать возврата содержимого этого поля.
Ниже приведен пример замены содержимого поля заголовка:
&fl=*,title:[value v=""]
Существует еще один более простой патч, который решает простой случай: https://issues.apache.org/jira/browse/SOLR-9467 если он будет принят, он будет работать так:
&fl=*,[fl.rm v="title"]
Удалить поле заголовка.