Мой индекс Solr содержит многозначное поле с повторяющимися значениями. Как удалить дубликаты?
Можно ли перезаписать повторяющиеся значения в многозначное поле при индексировании?
Спасибо
Мой индекс Solr содержит многозначное поле с повторяющимися значениями. Как удалить дубликаты?
Можно ли перезаписать повторяющиеся значения в многозначное поле при индексировании?
Спасибо
Я изо всех сил пытался добиться того же. Это сработало для меня. Добавьте нижеприведенный процессор в файл 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>
На самом деле опаздывал на вечеринку, но верхний ответ не работал у меня в 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>
Это не только предотвратит добавление дубликатов, но и удалит все дубликаты из вашего индекса при обновлении для указанных полей.
Вам нужно будет обработать его на стороне клиента, чтобы удалить повторяющиеся значения.
Вы можете настроить реализацию, например RemoveDuplicatesTokenFilterFactory (работает для того же текста в том же положении), чтобы отфильтровать маркеры. Напишите расширение в основном. ИЛИ
Кроме того, если использовать многозначное поле только для огранки, значение в гранированном поле подсчитывается только один раз. Поэтому, даже если вы добавите несколько одинаковых значений, это будет отражено как одно значение в записи счетчика граней. Попробуйте это. вы тоже можете подтвердить.
Однако повторяющиеся значения вызовут изменение в lengthNorm и, следовательно, могут повлиять на оценку.
Или вы могли бы обработать его в Solr, но в UpdateRequestProcessor, чтобы это произошло до индексирования, и вам не нужно учиться о цепочке анализа.
Вы можете использовать java или несколько языков сценариев с ScriptUpdateProcessor
Эта конфигурация работает для 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>