Как работает функция Solr без схемы? Как вернуть его в классическую схему?

Просто обнаружил, что Solr 5 не требует, чтобы файл схемы был предопределен, и он генерирует схему на основе выполняемой индексации. Я хотел бы знать, как это работает в фоновом режиме?

И это хорошая практика или нет? Есть ли способ отключить его?

Ответы

Ответ 1

Функция schemaless была в Solr с версии 4.3. Но он может быть более стабильным только сейчас, когда проблема a concurrency была исправлена ​​в 4.10.

Он также называется управляемой схемой. Когда вы настраиваете Solr для использования управляемой схемы, Solr использует специальный UpdateRequestProcessor для перехвата запросов индексирования документов, и он угадывает типы полей.

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

Затем вы должны использовать API схемы, если хотите внести изменения в схему. См. Также документа Схематический режим.

Как изменить управляемую схему Solr на классическую схему

Стоп Solr: $ bin/solr stop

Перейдите к server/solr/mycore/conf, где "mycore" - это имя вашего ядра/коллекции.

Изменить solrconfig.xml:

  • найдите <schemaFactory class="ManagedIndexSchemaFactory"> и прокомментируйте весь элемент
  • найдите <schemaFactory class="ClassicIndexSchemaFactory"/> и раскомментируйте его
  • найдите элемент <initParams>, который ссылается на add-unknown-fields-to-the-schema, и закомментируйте все <initParams>...</initParams>

Переименуйте managed-schema в schema.xml, и все готово.

Теперь вы можете снова запустить Solr: $ bin/solr start, перейдите в http://localhost:8983/solr/#/mycore/documents и убедитесь, что Solr теперь отказывается индексировать документ с новым полем, еще не указанным в schema.xml.

Это хорошая практика? Когда его использовать?

Это зависит от того, что вы хотите. Если вы хотите применить определенную структуру документа (например, чтобы убедиться, что все документы "правильно сформированы" в соответствии с вашим определением), вы хотите использовать классическое управление схемой.

Если, с другой стороны, вы не знаете заранее, что такое структура документа, вы можете использовать функцию без схемы.

Ограничения

Пока он называется schema-less, существуют ограничения на типы структур, которые вы можете индексировать. Это верно и для Solr, и для Elasticsearch, между прочим. Например, если вы сначала указали этот документ:

{"name":"John Doe"}

тогда вы получите сообщение об ошибке, если попытаетесь проиндексировать следующий документ следующим образом:

{"name": {
   "first": "Daniel",
   "second": "Dennett"
   }
}

Это связано с тем, что в первом случае поле name имеет строку типа, а во втором случае это объект.

Если вы хотите использовать индексацию, которая выходит за рамки этих ограничений, вы можете использовать SIREn - это с открытым исходным кодом, полуструктурированный механизм поиска информации, который реализован как плагин для Solr и Elasticsearch. (Отказ от ответственности: я работал в компании, которая разрабатывает SIREn)

Ответ 2

Это так называемый режим схемы в Solr. Я не знаю о внутренних деталях, о том, как это реализовано и т.д.

bin/solr start -e schemaless

Этот фрагмент выше запустит Solr в режиме схематизации, если вы этого не сделаете, он будет работать как обычно.

Для получения дополнительной информации о schemaless, посмотрите здесь https://cwiki.apache.org/confluence/display/solr/Schemaless+Mode