Как добавить файл в Solr? - PullRequest
2 голосов

Я использую Apache Solr, чтобы я мог работать с файлами, я могу добавить обычные текстовые поля через Spring, но я не знаю, как добавить TXT / pdf

@SolrDocument(solrCoreName = "accounting")
public class Accounting {
@Id
@Field
private String id;
@Field
private File txtFile;
@Field
private String docType;
@Field
private String docTitle;

public Accounting() {
}

public Accounting(String id, String docType, String docTitle) {
    this.id = id;
    this.docTitle = docTitle;
    this.docType = docType;
}

вот проблема с полем txtFile

   <field name="docTitle" type="strings"/>
  <field name="docType" type="strings"/>

В этих полях, которые я вручную добавил в schema.xml, я не могу понять, как сюда добавить поле, которое будет отвечать за файл, например, я добавлю сюда текстовый файл, как это сделать? Большое спасибо. И правильно ли я объявляю поле private File txtFile; в сущности для файла?

1 Ответ

0 голосов
/ 30 мая 2019

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

Вы можете попробовать что-то вроде приведенного ниже кода. Текущий код не использует ничего из Springboot. Здесь содержимое читается из документа PDF, а затем данные индексируются в Solr вместе с идентификатором и именем файла. Я использовал тика apis для извлечения содержимого PDF.

public static void main(final String[] args) throws IOException, TikaException, SAXException {

        String urlString = "http://localhost:8983/solr/TestCore1";
        SolrClient solr = new HttpSolrClient.Builder(urlString).build();

        BodyContentHandler handler = new BodyContentHandler();
        Metadata metadata = new Metadata();
        File file = new File("C://Users//abhijitb//Desktop//TestDocument.pdf");
        FileInputStream inputstream = new FileInputStream(file);
        ParseContext pcontext = new ParseContext();

        // parsing the document using PDF parser
        PDFParser pdfparser = new PDFParser();
        pdfparser.parse(inputstream, handler, metadata, pcontext);

        // getting the content of the document
        //System.out.println("Contents of the PDF :" + handler.toString());

        try {
            String fileName = file.getName();
            SolrInputDocument document = new SolrInputDocument();
            document.addField("id", "123456");
            document.addField("title", fileName);
            document.addField("text", handler.toString());
            solr.add(document);
            solr.commit();
        } catch (SolrServerException | IOException e) {
            e.printStackTrace();
        }
    }

Как только вы проиндексировали данные, их можно проверить на странице администрирования solr, запросив их. Пожалуйста, найдите изображение для справки.

Solr Admin Page

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...