Добавьте второе поле с именем numbers_count
, добавьте инструкцию copyField
для перемещения содержимого из поля numbers
в numbers_count
и добавьте цепочку обновлений с CountFieldValuesUpdateProcessorFactory
, присоединенным для поля numbers_count
.
<updateRequestProcessorChain name="add-numbers-count">
<processor class="solr.processor.CountFieldValuesUpdateProcessorFactory" />
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
(два процессора в конце необходимы для того, чтобы процессор правильно распределял документы по SolrCloud)
Затем вы включаете параметр update.chain=add-numbers-count
при индексации содержимого или вынастройте его как значение по умолчанию для одного из ваших обработчиков запросов:
<initParams path="/update/**">
<lst name="defaults">
<str name="update.chain">add-numbers-count</str>
</lst>
</initParams>
Дополнительные примеры того, как это сделать, вы можете найти в Обновление процессоров запросов в справочном руководстве .
CountFieldValuesUpdateProcessorFactory
заменяет данные значения их количеством, поэтому в приведенном выше примере поле numbers_count
будет 1
для первых двух случаев и 2
для вторых двух случаев. Таким образом, вы можете добавить fq=numbers_count:1
к вашему запросу и получить только те поля, в которых значение является единственным значением для этого поля.
Поскольку это разрешение будет выполнено во время индексации, производительность вашего запроса на самом деле не должнаизменить в любом случае из-за изменения.