Индексируйте несколько файлов в Solr одним запросом и добавляйте поля для каждого файла

В качестве наилучшей практики я пытаюсь индексировать кучу документов в Solr одним запросом, а не индексировать по одному. Теперь у меня проблема с тем, что файлы, которые я индексирую, имеют разные типы (pdf, текстовый документ, текстовый файл и т. д.) и, следовательно, имеют разные метаданные, которые извлекаются из Tika и индексируются. Я хотел бы иметь определенные поля/информацию для всех файлов, независимо от типа, таких как создатель, дата создания и путь, например, но я не знаю, как вручную добавлять поля, когда я индексирую все файлы сразу. Если бы я индексировал один файл за раз, я мог бы просто добавить поля с помощью request.setParam(), но это для всего запроса, а не для одного файла. И даже если что-то подобное возможно, как бы я получил информацию, как создатель файла в Java?

Есть ли возможность добавлять поля для каждого файла?

if (listOfFiles != null) {
   for (File file : listOfFiles) {
      if (file.isFile()) {
         request.addFile(file, getContentType(file));
         //add field only for this file?
      }else{
         //Folder, call the same method again -> recursion
         request = addFilesToRequest(file, request);
      }
   }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
388
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Насколько я знаю, нет возможности отправить несколько файлов в одном и том же запросе. Эти запросы обычно настолько тяжелы для обработки, что уменьшение количества HTTP-запросов может не сильно изменить общее время обработки.

Если вы хотите ускорить его, вы можете сначала обработайте все ваши файлы локально с помощью Tika (Tika — это то, что также используется внутри Solr), а затем отправлять только извлеченные данные. Таким образом, вы можете выполнять многопоточный процесс извлечения, добавлять результаты в очередь и позволять процессу отправки Solr выполняться по мере роста очереди — при этом весь контент отправляется в Solr несколькими большими пакетами (например, 1000 документов за раз).

Это также позволяет вам масштабировать процесс индексации без необходимости добавлять дополнительные серверы Solr, чтобы ускорить эту часть процесса (если ваш узел Solr может идти в ногу с поисковым трафиком, нет необходимости масштабировать его только для обработки документов). ).

Использование Tika вручную также упрощает исправление или изменение деталей во время обработки, таких как форматы файлов, возвращающие даты в разных часовых поясах и т. д., чем вы ожидаете.

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

Похожие вопросы

Конструктор StringEntity(String, String, String) устарел
Ошибка: дублировать класс при компиляции Java-проекта с Gradle, содержащего источники, сгенерированные кинжалом
Как установить spring.config.location для проекта весенней загрузки gradle в версии сообщества Intellij IDEA?
Com.mysql.jdbc. Драйвер не загружен. Вы уверены, что включили правильный драйвер jdbc в :jdbc_driver_library?
Запрос критерия бэкэнда Hibernate содержит: где (1 = 1), что это значит?
Как найти все индексы объекта в списке без цикла?
Immutables Автоматически созданный репозиторий для MongoDB выдает «Не удается найти кодек для интерфейса» CodecConfigurationException
Символы Юникода в файле json не будут преобразованы после управления java gson
Как реализовать многопользовательские взаимодействия для настольного приложения на основе Java?
Передача файла в качестве параметра другому классу в Java вызывает ошибку «Файл или каталог не найден»