Загрузка данных из TSV и CSV

TSV/CSV — это самый простой способ передачи данных индексатору Manticore. Этот метод был создан из-за ограничений xmlpipe2. В xmlpipe2 индексатор должен сопоставить каждый тег атрибута и поля в XML-файле с соответствующим элементом схемы. Это сопоставление требует времени, и оно увеличивается с ростом количества полей и атрибутов в схеме. У TSV/CSV такой проблемы нет, так как каждое поле и атрибут соответствуют определённому столбцу в TSV/CSV файле. В некоторых случаях TSV/CSV может работать немного быстрее, чем xmlpipe2.

Формат файла

Первый столбец в TSV/CSV файле должен быть идентификатором документа. Остальные столбцы должны соответствовать объявлению полей и атрибутов в определении схемы. Обратите внимание, что вам не нужно объявлять идентификатор документа в схеме, поскольку он всегда считается присутствующим, должен находиться в 1-м столбце и должен быть уникальным положительным ненулевым 64-битным целым числом со знаком.

Разница между tsvpipe и csvpipe заключается в разделителе и правилах кавычек. В tsvpipe в качестве жёстко заданного разделителя используется символ табуляции, и нет правил кавычек. В csvpipe есть опция csvpipe_delimiter для разделителя со значением по умолчанию , (запятая), а также действуют правила кавычек, такие как:

  • Любое поле может быть заключено в кавычки
  • Поля, содержащие разрыв строки, двойные кавычки или запятые, должны заключаться в кавычки
  • Символ двойной кавычки в поле должен быть представлен двумя символами двойной кавычки

Объявление TSV потока

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

Индексируемые столбцы TSV

Для объявления типов индексируемых столбцов можно использовать следующие директивы:

  • tsvpipe_field — объявляет текстовое поле (text).
  • tsvpipe_field_string — объявляет текстовое поле/строковый атрибут. Столбец будет как проиндексирован как текстовое поле, так и сохранён как строковый атрибут.
  • tsvpipe_attr_uint — объявляет целочисленный атрибут.
  • tsvpipe_attr_timestamp — объявляет атрибут временной метки.
  • tsvpipe_attr_bool — объявляет булев атрибут.
  • tsvpipe_attr_float — объявляет атрибут с плавающей запятой.
  • tsvpipe_attr_bigint — объявляет атрибут с большим целым числом.
  • tsvpipe_attr_multi — объявляет многозначный атрибут с целыми числами.
  • tsvpipe_attr_multi_64 — объявляет многозначный атрибут с 64-битными целыми числами.
  • tsvpipe_attr_string — объявляет строковый атрибут.
  • tsvpipe_attr_json — объявляет JSON атрибут.

Пример источника, использующего TSV файл:

source tsv_test
{
    type = tsvpipe
    tsvpipe_command = cat /tmp/rock_bands.tsv
    tsvpipe_field = name
    tsvpipe_attr_multi = genre_tags
}
1   Led Zeppelin    35,23,16
2   Deep Purple 35,92
3   Frank Zappa 35,23,16,92,33,24

Объявление CSV потока

Директива csvpipe_command является обязательной и содержит команду оболочки, вызываемую для создания CSV потока, который индексируется. Команда может просто читать CSV файл, но также может быть программой, которая генерирует содержимое с разделителями-запятыми на лету.

Индексируемые столбцы CSV

Для объявления типов индексируемых столбцов можно использовать следующие директивы:

  • csvpipe_field — объявляет текстовое поле (text).
  • csvpipe_field_string — объявляет текстовое поле/строковый атрибут. Столбец будет как проиндексирован как текстовое поле, так и сохранён как строковый атрибут.
  • csvpipe_attr_uint — объявляет целочисленный атрибут.
  • csvpipe_attr_timestamp — объявляет атрибут временной метки.
  • csvpipe_attr_bool — объявляет булев атрибут.
  • csvpipe_attr_float — объявляет атрибут с плавающей запятой.
  • csvpipe_attr_bigint — объявляет атрибут с большим целым числом.
  • csvpipe_attr_multi — объявляет многозначный атрибут с целыми числами.
  • csvpipe_attr_multi_64 — объявляет многозначный атрибут с 64-битными целыми числами.
  • csvpipe_attr_string — объявляет строковый атрибут.
  • csvpipe_attr_json — объявляет JSON атрибут.

Пример источника, использующего CSV файл:

source csv_test
{
    type = csvpipe
    csvpipe_command = cat /tmp/rock_bands.csv
    csvpipe_field = name
    csvpipe_attr_multi = genre_tags
}
1,"Led Zeppelin","35,23,16"
2,"Deep Purple","35,92"
3,"Frank Zappa","35,23,16,92,33,24"
Last modified: August 28, 2025