Несмотря на то, что вы определяете поля в файле с именем schema.xml
, документы Solr на самом деле без схем .Это означает, что внутренне движок Solr (Lucene) не имеет определений полей, которые должен иметь каждый документ.С Lucene вы можете легко добавить поле myCompletelyNewField
к любому документу, так или иначе не затрагивая другие документы.
Итак, в чем причина schema.xml
?Каждое поле в Solr / Lucene имеет несколько свойств, наиболее известные из них - свойства indexed
и stored
.Более того, все поля должны быть привязаны к какому-либо внутреннему типу данных и единицам обработки.Например, поле id
должно храниться в виде строки, а поле description
должно быть проанализировано с помощью некоторого анализатора английского языка, очищено с помощью фильтра стоп-слов и так далее.Передача всей этой информации в запросе add
к Solr очень неудобна.Поскольку вы знаете, какие поля вы будете использовать, и имеете доступ к серверу Solr (по крайней мере, в большинстве случаев), гораздо проще перенести всю эту информацию в отдельный файл.И этот файл schema.xml
.
Итак, теперь вы должны понимать, что schema.xml
определяет поля, которые разрешены , но не поля, которые должны существовать в документе,Дополнительные модификаторы, такие как required
и default
, просто предоставляют дополнительные услуги перед добавлением документов в индекс.Т.е. required
заставит Solr "front-end" проверить, существует ли указанное поле в новом документе.Если да, он передает документ дальше, в противном случае он отклоняет новый документ.default
вызывает такую же проверку, но если поле отсутствует, оно добавляет его со значениями по умолчанию и передает документ дальше.
Что касается вашей ошибки "Bad Request", я предполагаю, что у вас есть ошибка где-то еще, например, вы добавляете пустое поле (поле существует, но его значение равно ""), пока оно не разрешено, или используете неверное значение дляполе, или добавить некоторые другие модификаторы, которые противоречат фактическому полю.