Solr: каковы значения по умолчанию для полей, для которых явно не установлено значение по умолчанию? - PullRequest
4 голосов
/ 07 сентября 2011

Я работаю с scher.xml от Solr и знаю, что могу использовать атрибут 'default', чтобы указать значение по умолчанию, которое будет использоваться, если значение для данного поля не было предоставлено.Однако, скажем, что я предпочитаю не устанавливать атрибут 'default', к какому значению по умолчанию Solr будет затем возвращаться?

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

Однако я не уверен и хотел бызнать: -)

ОБНОВЛЕНИЕ 1

Насколько я могу видеть, Solr просто выдает ошибку и возвращает ошибку 400 "Bad Request", если нет значения по умолчаниюбыло установлено, и не было предоставлено значение для данного поля.Другими словами, кажется, что Solr не применяет какие-либо «резервные» значения по умолчанию в том случае, если значение не указано и значение по умолчанию не задано в schema.xml.

UPDATE 2

моё вышеприведённое обновление кажется неверным.Если для поля не было задано значение и для этого поля не было задано значение по умолчанию, то Solr просто обработает поле так, как если бы оно не существовало для этого конкретного документа.Это поведение, конечно, не применяется, если поле является обязательным.

Ответы [ 3 ]

6 голосов
/ 07 сентября 2011

Если вы не предоставите значение для поля во время индексации, solr будет использовать значение по умолчанию, как определено в файле schema.xml.Если значение по умолчанию не определено, solr игнорирует это поле.Если поле помечено как обязательное в schema.xml - solr отклонит этот документ с ошибкой.

Пример:

<field name="comments" type="text" indexed="true" stored="true" required="true"/>
<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" />
4 голосов
/ 07 сентября 2011

Исходя из моего опыта, если вы не укажете поле при загрузке документов, то Solr просто проигнорирует это поле, когда будет индексировать документ, и ваше утверждение "не предоставляя значение и не устанавливая значение по умолчанию эффективно, будет таким, как если бы это поле не существует для конкретного документа "верно. Подвох в том, что вам нужно только указать поля, которые вы хотите добавить для данного документа. Ознакомьтесь с примерами xml, которые поставляются с Solr Distribution, чтобы увидеть примеры файлов, которые содержат разные наборы полей.

2 голосов
/ 07 сентября 2011

Несмотря на то, что вы определяете поля в файле с именем 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", я предполагаю, что у вас есть ошибка где-то еще, например, вы добавляете пустое поле (поле существует, но его значение равно ""), пока оно не разрешено, или используете неверное значение дляполе, или добавить некоторые другие модификаторы, которые противоречат фактическому полю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...