Solr copyField, смешанный с RegexTransformer
Сценарий:
В базе данных у меня есть поле с именем Категории, который имеет тип строки и содержит количество разрядов, разделенных символом, например: 1|8|90|130|
Что я хочу:
В индексе Solr я хочу иметь 2 поля:
- Поле Категории_ труба, которая будет содержать точную строку, как в БД, т.е.
1|8|90|130|
- Категории полей, которые будут многозначным полем типа INT, содержащим значения 1, 8, 90 и 130
В последнем случае в спецификации сущности я могу использовать regexTransformer, а затем указать следующее поле в data-config.xml:<field column="Categories" name="Navigation" splitBy="\|"/>
а затем укажите поле как многозначное в schema.xml
Чего я не знаю, так это как я могу "скопировать" одно и то же поле дважды и выполнить разбиение регулярного выражения только на одном. Я знаю, что есть copyField
средство, которое может быть определено в schema.xml, однако я не могу найти способ преобразовать скопированное поле, потому что, насколько я знаю (и я могу ошибаться здесь), преобразователи доступны только в спецификации объекта.
В качестве обходного пути я также могу дважды отправить одно и то же поле из запроса сущности, но на самом деле поле Категории является вычисляемым полем (выбирает вложенное), что несколько дорого, поэтому я хотел бы избежать этого.
Любая помощь приветствуется, спасибо.
2 ответа
Вместо того, чтобы разбить его на data-config.xml
, Вы могли бы сделать это в своем schema.xml
, Вот что ты мог сделать,
- Создать fieldType с токенизатором
PatternTokenizerFactory
который использует регулярное выражение для разделения на основе|
, - FieldSplit: Создать
multivalued
поле с помощью этогоnew fieldType
, в конечном итоге будет 1,8,90,130 - FieldOriginal: Создать поле String (если вам не требуется анализ по нему), которое сохраняет исходное значение 1|8|90|130|
- Теперь вы можете использовать copyField для копирования значений FieldSplit, FieldOriginal в зависимости от ваших потребностей.
Проверьте этот вопрос, это похоже.
Вы можете создать два столбца из одних и тех же данных и обрабатывать их отдельно.
ВЫБЕРИТЕ категории, категории как category_pipe FROM category_table
Затем вы можете разбить столбец "категории", но индексировать другой как есть.