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

Ошибка Solr Эта индексная схема не изменена

Я хочу использовать schema.xml, а не управляемую схему, поэтому я изменил следующее в файле solrconfig.xml на ниже

<schemaFactory class="ManagedIndexSchemaFactory">
    <bool name="mutable">true</bool>
    <str name="managedSchemaResourceName">managed-schema</str>
  </schemaFactory>

к

<schemaFactory class="ClassicIndexSchemaFactory"/> 

Но я получаю. indexschema не является изменяемой ошибкой, когда я пытаюсь индексировать плоский файл с помощью команды post.

4b9b3361

Ответ 1

Удалите раздел AddSchemaFieldsUpdateProcessorFactory из конфигурации updateRequestProcessorChain в файле solrconfig.xml

Параметр schemaFactory в файле solrconfig.xml. Это определяет, должна ли схема быть определена как "управляемая индексная схема": модификация схемы возможна только через API схемы. По умолчанию, если параметр schemaFactory не указан, то по умолчанию используется "ClassicIndexSchemaFactory"

В программе ClassicIndexSchemaFactory требуется использовать файл schema.xml, который можно редактировать вручную и загружается только при загрузке коллекции. Этот параметр запрещает методы API схемы, которые изменяют схему.

Если указано ManagedIndexSchemaFactory, Solr загрузит схему из ресурса, названного в managedSchemaResourceName, а не из schema.xml.

AddSchemaFieldsUpdateProcessorFactory: этот процессор будет динамически добавлять поля в схему, если входной документ содержит один или больше полей, которые не соответствуют никакому полю или динамическому полю в схеме.

здесь больше читайте здесь https://lucene.apache.org/solr/4_6_0/solr-core/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.html

Короче приведенный выше процесс factory используется для управляемой схемы. Если вы не хотите использовать ManagedIndexSchemaFactory, его следует удалить из updateRequestProcessorChain.

Для получения более подробной информации об этом вы можете проверить код solr или прочитать исходный код AddSchemaFieldsUpdateProcessorFactory.java Отладка метода processAdd(AddUpdateCommand cm), поможет больше на том же.

Ответ 2

По крайней мере, в Solr 7.2 вам, вероятно, следует просто переключить update.autoCreateFields на false в определении updateRequestProcessorChain в solrconfig.xml, как указано в комментарии.

<!-- The update.autoCreateFields property can be turned to false to disable schemaless mode -->
<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:false}"
                             processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
    <processor class="solr.LogUpdateProcessorFactory"/>
    <processor class="solr.DistributedUpdateProcessorFactory"/>
    <processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>

Это сработало, и теперь я получаю только красивые сообщения об ошибках вроде

Error from server at http://localhost:8983/solr: ERROR: [doc=urn:nbn:cz:tst01-000001] unknown field 'title'

пока я настраиваю свою статическую неуправляемую схему в schema.xml.

Ответ 3

Обновите autoCreateFields на false в solrconfig.xml.

${update.autoCreateFields:false}

Ответ 4

Я понимаю, что этот пост старый, но сегодня я столкнулся с тем же поведением при импорте json файла. Проблема была в том, что .json не был правильно сформирован. Ему не хватало [] (квадратные скобки) в верхней и нижней части файла и "," (запятые) между объектами. Я проверил файл с помощью http://jslint.com/. Ошибка была решена после внесения этих изменений.

ПРИМЕЧАНИЕ. Это были проблемы, из-за которых мой файл не был правильно сформирован. Я бы предположил, что вы запускаете свои данные через какой-либо тип валидатора, чтобы исключить любую проблему (ы), которую может иметь ваш файл.

Надеюсь, это поможет.

Ответ 5

Другой способ сделать это вместо редактирования файла solrconfig.xml - добавить значение update.autoCreateFields=false в файл core.properties.

Ответ 6

Для SOLR 7.7.2

Удалите "add-schema-field" из updateRequestProcessorChain.

  <updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
                               processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date">
    <processor class="solr.LogUpdateProcessorFactory"/>
    <processor class="solr.DistributedUpdateProcessorFactory"/>
    <processor class="solr.RunUpdateProcessorFactory"/>
  </updateRequestProcessorChain>