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, Вот что ты мог сделать,

  1. Создать fieldType с токенизатором PatternTokenizerFactory который использует регулярное выражение для разделения на основе |,
  2. FieldSplit: Создать multivalued поле с помощью этого new fieldType, в конечном итоге будет 1,8,90,130
  3. FieldOriginal: Создать поле String (если вам не требуется анализ по нему), которое сохраняет исходное значение 1|8|90|130|
  4. Теперь вы можете использовать copyField для копирования значений FieldSplit, FieldOriginal в зависимости от ваших потребностей.

Проверьте этот вопрос, это похоже.

Вы можете создать два столбца из одних и тех же данных и обрабатывать их отдельно.

ВЫБЕРИТЕ категории, категории как category_pipe FROM category_table

Затем вы можете разбить столбец "категории", но индексировать другой как есть.

Другие вопросы по тегам