Как вставить два документа в один документ - PullRequest
1 голос
/ 25 мая 2019

У меня есть два документа. Один документ содержит имя человека, соответствующий ранг и идентификатор документа, этот документ в формате CSV. Скриншот для того же ниже. enter image description here

Другой комплект документов содержит параграфы. Вот снимок экрана с другим набором документов, эти документы названы как ID документа и представлены в текстовом формате. enter image description here

Мне нужно вставить эти два как один документ в Solr, так что в Solr у меня есть документ в формате:

Person: arthur w cabot
KDE Rank: 5.98+108
Text: Text from the other set of documents

Как мне этого добиться. Кроме того, я хотел бы знать, есть ли другой подход, которому я могу следовать?

1 Ответ

3 голосов
/ 28 мая 2019

В вашем случае вы можете создать документ solr и зафиксировать его в solr.Примерно так:

SolrInputDocument document = new SolrInputDocument();
document.addField("id", "123456");
document.addField("title", fileName);
document.addField("text", contentBuilder.toString());
solr.add(document);
solr.commit();

В вашем случае это поля personName, personRank и documentContent.Я предполагаю, что чтение файла CSV будет выполняться с вашей стороны, и вы получите имя документа, и вы уже знаете, где находится документ.

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

Третий - это содержание документа поля.Поскольку вы получаете только имя файла документа, вы можете прочитать содержимое документа и передать его в документ solr в качестве третьего поля.

Я сделал для вас один вариант.Примерно так:

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

StringBuilder contentBuilder = new StringBuilder();
try (Stream<String> stream = Files.lines(Paths.get("D:/LogFolder/IB4_buildViewSchema.txt"),
StandardCharsets.UTF_8)) {
  stream.forEach(s -> contentBuilder.append(s).append("\n"));
  } catch (IOException e) {
    e.printStackTrace();
  }

try {
    File file = new File("D:/LogFolder/IB4_buildViewSchema.txt");
    String fileName = file.getName();
    SolrInputDocument document = new SolrInputDocument();
    document.addField("id", "123456");
    document.addField("title", fileName);
    document.addField("text", contentBuilder.toString());
    solr.add(document);
    solr.commit();
} catch (SolrServerException | IOException e) {
    e.printStackTrace();
}

Это пойдет в итеративном режиме для всех данных CSV.

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

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

Solr Admin Page

Примечание. Я создаю проект maven и написал приведенный выше фрагмент кода.Если вы хотите, вы можете использовать ниже pom.xml для справки.

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>solr</groupId>
    <artifactId>TestSolr2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>TestSolr2</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>7.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-cell</artifactId>
            <version>7.6.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...