Как вы заметили, вы можете дублировать строки в вашем блоке searchable
для полей, которые вы хотите проиндексировать несколькими различными способами.На самом деле я бы порекомендовал это, так как вы на самом деле сохраняете некоторую гранулярность полей (как будет показано ниже), и у вас есть несколько хороших помощников Sunspot, таких как опция inline :boost
.также используйте директиву Solr copyField
в схеме.Это выглядит примерно так:
<copyField source="source_field" dest="dest_field" maxChars="N" />
Имя исходного поля может быть шаблоном, однако пункт назначения должен быть одним полем.Кроме того, я считаю, что пункт назначения должен быть определен как собственный field
, а не как имя, сопоставленное с dynamicField
.
С учетом этих ограничений вы можете настроить что-то подобное в своей схеме:
<fields>
...
<field name="all_text_phonetic" stored="false" type="text_phonetic" multiValued="true" indexed="true"/>
...
</fields>
<copyField source="*_text" dest="all_text_phonetic" />
<copyField source="*_texts" dest="all_text_phonetic" />
Чтобы сохранить детализацию ваших полей, вы можете установить директиву copyField
для каждого входящего поля.Но тогда у вас, вероятно, будет на больше дубликатов, чем потребуется для создания отдельных строк в вашем searchable
блоке.
Так что это бросок.Но это ваши варианты.