Как установить несколько полей в качестве уникального ключа в solr?

#solr #solr-schema

#solr #solr-schema

Вопрос:

У меня есть эти поля в моей схеме solr :

 <fields>
    <field name="Id" type="string" indexed="true" stored="true" multiValued="false" required="true" />
    <field name="IdCategory" type="string" indexed="true" stored="true" multiValued="false" required="true" />
    <field name="Rank" type="long" indexed="true" stored="true" multiValued="false" required="true" />
    <field name="TypeRank" type="string" indexed="true" stored="true" multiValued="false" required="false" default="category" />

    <field name="_version_" type="long" indexed="true" stored="true"/>
</fields>
 

Могу ли я использовать 2 или 3 поля в качестве уникальных ключей вместо одного?
Когда я пытаюсь :

 <uniqueKey>(Id,IdCategory,Rank,TypeRank)</uniqueKey>
 

Я получаю следующую ошибку :

org.apache.solr.common.Исключение SolrException:org.apache.solr.common.Исключение SolrException: ошибка синтаксического анализа схемы: неизвестное поле ‘(Id, idCategory, Rank, TypeRank)’. Файл схемы /var/solr/Rank/schema.xml

Ответ №1:

Вы не можете использовать 2 или 3 (или 4) поля в уникальном ключе так, как вы пытаетесь это сделать. Он должен указывать на одно строковое поле. Вы должны быть в состоянии сгенерировать объединенное поле значений, которые вы хотите, в одну уникальную строку перед индексацией.

Комментарии:

1. У меня это не сработало. Я получаю сообщение об ошибке uniqueKey field can not be the dest of a copyField

2. Я думаю, это было исправлено в версии 4.0? issues.apache.org/jira/browse/SOLR-2796

3. Это не было «исправлено» в 4.0 — возможность сделать это была удалена. Двигаясь вперед, вы должны использовать updateRequestProcessorChain в вашем solrconfig.xml wiki.apache.org/solr/Deduplication

4. ах, имеет смысл, что это было бы сложно с разделением на uniquekey в облаке. Я генерирую значение перед отправкой в solr, поэтому еще не сталкивался с этим.