Совпадение, где многозначное поле имеет запрашиваемое значение - PullRequest
0 голосов
/ 29 октября 2019

У меня есть несколько документов, где поле многозначно. Примеры:

{
  "numbers": ["Seventeen"]
},
{
  "numbers": ["Twenty One"]
},
{
  "numbers": ["Seventeen", "Twenty One"]
},
{
  "numbers": ["Twenty One", "Nineteen"]
} 

Если я запрашиваю q=numbers:"Twenty One", он вернет оба документа, где «Twenty One» - это значение для поля «numbers». Есть ли способ сделать так, чтобы он возвращал только документ, который имеет «Twenty One» в качестве единственного значения?

thnx,

1 Ответ

1 голос
/ 29 октября 2019

Добавьте второе поле с именем 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 к вашему запросу и получить только те поля, в которых значение является единственным значением для этого поля.

Поскольку это разрешение будет выполнено во время индексации, производительность вашего запроса на самом деле не должнаизменить в любом случае из-за изменения.

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