TSV/CSV — это самый простой способ передачи данных индексатору Manticore. Этот метод был создан из-за ограничений xmlpipe2. В xmlpipe2 индексатор должен сопоставить каждый тег атрибута и поля в XML-файле с соответствующим элементом схемы. Это сопоставление требует времени, и оно увеличивается с ростом количества полей и атрибутов в схеме. У TSV/CSV такой проблемы нет, так как каждое поле и атрибут соответствуют определённому столбцу в TSV/CSV файле. В некоторых случаях TSV/CSV может работать немного быстрее, чем xmlpipe2.
Первый столбец в TSV/CSV файле должен быть идентификатором документа. Остальные столбцы должны соответствовать объявлению полей и атрибутов в определении схемы. Обратите внимание, что вам не нужно объявлять идентификатор документа в схеме, поскольку он всегда считается присутствующим, должен находиться в 1-м столбце и должен быть уникальным положительным ненулевым 64-битным целым числом со знаком.
Разница между tsvpipe и csvpipe заключается в разделителе и правилах кавычек. В tsvpipe в качестве жёстко заданного разделителя используется символ табуляции, и нет правил кавычек. В csvpipe есть опция csvpipe_delimiter для разделителя со значением по умолчанию , (запятая), а также действуют правила кавычек, такие как:
- Любое поле может быть заключено в кавычки
- Поля, содержащие разрыв строки, двойные кавычки или запятые, должны заключаться в кавычки
- Символ двойной кавычки в поле должен быть представлен двумя символами двойной кавычки
Директива tsvpipe_command является обязательной и содержит команду оболочки, вызываемую для создания 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
Директива csvpipe_command является обязательной и содержит команду оболочки, вызываемую для создания 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"