Как исключить поля в запросе SOLR

У меня есть запрос SOLR, который должен получить все поля, которые я храню, кроме одного поля.
Допустим, у меня есть 20 полей, нужно ли мне жестко кодировать 19 полей? Я хочу получить в
&fl=[f],[f],[f],....[f]'
Или есть способ сделать что-то похожее на
&fl=*,![f]'

[f] обозначает имя поля.


person Itay Moav -Malimovka    schedule 19.04.2013    source источник


Ответы (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 см. в RequestHandlers и SearchComponents в SolrConfig< /а>.

person Paige Cook    schedule 19.04.2013
comment
Я хочу иметь эту функцию. - person sky; 04.07.2014

Другим вариантом может быть: поля, которые вы хотите включить, должны иметь общий префикс; кроме того, вы можете использовать globs в своем fl. Так, например, предполагая, что префикс должен быть включен_, вы можете иметь значение fl, например

быть включенным_*

person Andrea    schedule 28.06.2015

Другим вариантом может быть использование преобразователя документов ValueAugmenterFactory. для замены фактического значения, возвращаемого полем, пустой строкой.

Это должно работать, если ваше требование состоит в том, чтобы просто не возвращать содержимое этого поля.

Ниже приведен пример замены содержимого поля заголовка:

&fl=*,title:[value v=""]
person Wellington    schedule 07.10.2016

Существует еще один более простой патч, который решает этот простой случай: https://issues.apache.org/jira/browse/SOLR-9467, если он будет принят, он будет работать следующим образом:

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

Чтобы удалить поле заголовка.

person Gus    schedule 02.09.2016
comment
Отказ от ответственности: я, вероятно, должен упомянуть, что я написал этот патч. - person Gus; 03.09.2016
comment
дайте нам знать, когда/если вас примут. Я не знаком с архитектурой Lucen/SOLR, но не могли бы вы опубликовать это как отдельный плагин, который можно поставить на место? - person Itay Moav -Malimovka; 03.09.2016
comment
Я думаю, что было бы возможно упаковать основной класс и использовать его в конфигурации обработчика запросов, но чтобы он отображался для использования в &fl, мне пришлось добавить имя к классу в solr. Тем не менее, патч применяется чисто к ветке 6.2 со вчерашнего дня, поэтому, если вы проверите это из apache git, примените и создайте с ant create-package в каталоге solr, который должен создать в основном тот же tarball, что и 6.2 RC1 с добавлением этого. - person Gus; 03.09.2016
comment
минусовать?? Патч так и не был выпущен, потому что 3191 предположительно был сделан и готов (на самом деле я планирую вскоре посмотреть и продвигать 3191), но он действительно работал. - person Gus; 25.10.2018