Как намекает karmajunkie, Sunspot использует свою собственную стандартную схему. Я подробнее расскажу о том, как это работает, здесь.
Solr Schema 101
Для целей этого обсуждения схемы Solr в основном состоят из двух вещей: определения типов и определения полей.
Определение type
устанавливает тип путем указания его имени, класса Java для типа и, в случае некоторых типов (особенно текстового), подчиненного блока XML, конфигурирующего способ обработки этого типа.
Определение field
позволяет определить имя поля и имя типа значения, содержащегося в этом поле. Это позволяет Solr соотносить имя поля в документе с его типом, а также с несколькими другими параметрами и, следовательно, с тем, как значение этого поля должно обрабатываться в вашем индексе.
Solr также поддерживает определение dynamicField
, которое позволяет вместо статического имени поля указывать шаблон с глобусом в нем. Их имена могут сопоставляться с этими шаблонами для определения их типов.
Обычная схема Sunspot
Схема Sunspot содержит несколько field
определений для внутренних полей, таких как идентификатор и название модели. Кроме того, Sunspot широко использует определения dynamicField
для установления соглашений об именах на основе типов.
Такое использование соглашений об именах полей позволяет Sunspot определять DSL конфигурации, который создает отображение из вашей модели в XML-документ, готовый для индексации Solr.
Например, этот простой блок конфигурации в вашей модели…
searchable do
text :body
end
… будет использоваться Sunspot для создания имени поля body_text
. Это имя поля сопоставляется с шаблоном *_text
для следующего определения dynamicField
в схеме:
<dynamicField name="*_text" type="text" indexed="true" stored="false" multiValued="true"/>
Это сопоставляет любое поле с суффиксом _text
с определением Sunspot типа text
. Если вы посмотрите на schema.xml Sunspot, вы увидите много других аналогичных соглашений для других типов и опций. Например, опция :stored => true
обычно добавляет s
к суффиксу этого типа (например, _texts
).
Практическое изменение схемы Sunspot
В моем опыте работы с клиентами и моими собственными проектами есть два хороших случая для изменения схемы Sunspot. Во-первых, для внесения изменений в анализаторы поля text
на основе различных функций, которые могут понадобиться вашему приложению. И, во-вторых, для создания совершенно новых типов (обычно на основе типа текста) для более тонкого применения анализаторов Solr.
Например, расширенные совпадения поиска с помощью «нечетких» поисков могут быть выполнены со совпадениями со специальным текстовым полем, которое также использует лингвистические основы или NGrams. Жетоны в исходном поле text
могут использоваться для заполнения проверки орфографии или для повышения точных совпадений. А токены в пользовательском text_ngram
или text_en
могут служить для расширения результатов поиска при сбое более строгого сопоставления.
DSL в Sunspot предоставляет одну заключительную функцию для сопоставления ваших полей с этими пользовательскими полями. После того, как вы настроили type
и соответствующие ему определения dynamicField
, вы можете использовать опцию Sunspot :as
, чтобы переопределить генерацию имени на основе соглашения.
Например, добавив пользовательский тип ngram
для вышеупомянутого, мы могли бы закончить обработку тела снова с NGrams со следующим кодом Ruby:
searchable do
text :body
text :body_ngram, :as => 'body_ngram'
end