Подтвердить что ты не робот

Удаление дублирующих значений Solr в многозначное поле

Мой индекс Solr содержит многозначное поле с повторяющимися значениями. Как удалить дубликаты?

Можно ли перезаписать повторяющиеся значения в многозначное поле при индексировании?

Спасибо

4b9b3361

Ответ 1

Я изо всех сил пытался добиться того же. Это сработало для меня. Добавьте нижеприведенный процессор в файл solrconfig.xml

<updateRequestProcessorChain name="deduplicateMultiValued" default="true">
        <processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory">
            <lst name="fields">
                <str>multivaluedFieldXYZ</str>
            </lst>
        </processor>
        <processor class="solr.RunUpdateProcessorFactory" />
 </updateRequestProcessorChain>

Ответ 2

На самом деле опаздывал на вечеринку, но верхний ответ не работал у меня в Solr 6.0, пытаясь добавить дублируемую запись в многозначное поле. перед процессором t20 отсутствовал процессор. Поэтому добавление чего-то подобного в мой файл solrconfig.xml:

<updateRequestProcessorChain name="uniq-fields">
<processor class="org.apache.solr.update.processor.DistributedUpdateProcessorFactory"/>
<processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory">
  <str name="fieldName">YourFieldA</str>
  <str name="fieldName">yourFieldB</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />

Где YourFieldA и YourFieldB определены поля в schema.xml. Обратите внимание, что вы также должны добавить это к правильному requestHandler ie:

  <requestHandler name="/update" class="solr.UpdateRequestHandler" >
<lst name="defaults">
  <str name="update.chain">uniq-fields</str>
</lst>

Это не только предотвратит добавление дубликатов, но и удалит все дубликаты из вашего индекса при обновлении для указанных полей.

Ответ 3

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

Вы можете настроить реализацию, например RemoveDuplicatesTokenFilterFactory (работает для того же текста в том же положении), чтобы отфильтровать маркеры. Напишите расширение в основном. ИЛИ

Кроме того, если использовать многозначное поле только для огранки, значение в гранированном поле подсчитывается только один раз. Поэтому, даже если вы добавите несколько одинаковых значений, это будет отражено как одно значение в записи счетчика граней. Попробуйте это. вы тоже можете подтвердить.

Однако повторяющиеся значения вызовут изменение в lengthNorm и, следовательно, могут повлиять на оценку.

Ответ 4

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

Вы можете использовать java или несколько языков сценариев с ScriptUpdateProcessor

Ответ 5

Эта конфигурация работает для Solr 5.3.1

<updateRequestProcessorChain name="distinct-values" default="true">
    <processor class="solr.DistributedUpdateProcessorFactory"/>
    <processor class="solr.UniqFieldsUpdateProcessorFactory">
        <str name="fieldName">field1</str>
        <str name="fieldName">field2</str>
    </processor>
    <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>