Как удалить дубликаты из многозначных полей в SOLR?

Я попробовал решения, перечисленные в следующем вопросе.

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

Я использую обработчик dataimport и создаю несколько значений для поля с помощью RegexTransformer.

Мой sql возвращает это для столбца FOO

Джонни Кэш, Бонни Деньги, Милый Кролик, Джонни Кэш

и я сохраняю его в многозначное поле foo, используя splitBy=»,»

<field column="FOO" name="foo" splitBy=","/>    

и он хранится в многозначном поле как таковом

{«Johnny Cash», «Bonnie Money», «Honey Bunny», «Johnny Cash»»}

Я добавил Это в solrconfig xml

  <updateRequestProcessorChain name="distinctMultiValued" default="true">
    <!-- To remove duplicate values in a multivalued field-->
    <processor class="DistributedUpdateProcessorFactory"/>
    <processor class="UniqFieldsUpdateProcessorFactory">
        <str name="fieldRegex">foo</str>
    </processor>
    <processor class="solr.LogUpdateProcessorFactory" />        
    <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>

Я также пробовал fieldName вместо fieldRegex и пробовал *oo вместо foo, но дубликаты остаются.

Имеет ли это какое-то отношение к RegexTransformer?

У меня также есть цепь обновлений с TrimFieldsUpdateProcessorFactoryчем работает без каких-либо проблем.

3 ответа

  1. может быть, вам нужно упомянуть полное имя класса в классе процесса и <lst name="fields"> <str>multivaluedfield</str></lst>.как

    <processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory">
    <lst name="fields">
    <str>multivaluedFieldXYZ</str>
    </lst>
    </processor>

  2. Я смог решить эту проблему, переместив UniqFieldsUpdateProcessorFactory в существующий <updateRequestProcessorChain>блок, который у меня был.

      <updateRequestProcessorChain name="skip-empty" default="true">
        <!--  Next two processors affect all fields - default configuration -->
        <processor class="TrimFieldUpdateProcessorFactory" />
        <processor class="RemoveBlankFieldUpdateProcessorFactory" />
        <processor class="UniqFieldsUpdateProcessorFactory">
            <str name="fieldRegex">.*oo</str>
        </processor>
        <processor class="solr.LogUpdateProcessorFactory" />
        <processor class="solr.RunUpdateProcessorFactory" />
      </updateRequestProcessorChain>
    

    SOLR documentation UpdateRequestProcessorChain

    В качестве «по умолчанию»может быть настроена не более одной процессорной цепи. если нет
    процессор настроен по умолчанию, затем неявное использование по умолчанию
    LogUpdateProcessorFactory и RunUpdateProcessorFactory создан для
    вы. Поставка цепочки процессоров по умолчанию может быть единственным способом повлиять
    документы, индексированные из некоторых источников, таких как обработчик dataimport.

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

    @Описание поля»)
    описание публичной коллекции = new HashSet<>();