HTML-файл индекса Lucene с идентификаторами

Прежде всего, я хочу извиниться за свой плохой английский. У меня есть html-файл с именем cacm.html с большим количеством документов, каждый документ структурирован следующим образом:

.I indicates article identifier
.T idicates article title
.A indicates article authors
.W indicates article resume
.X indicates article references

Вот пример статьи:

.I 20
.T
Accelerating Convergence of Iterative Processes
.W
A technique is discussed which, when applied
to an iterative procedure for the solution of
an equation, accelerates the rate of convergence if
the iteration converges and induces convergence if
the iteration diverges.  An illustrative example is given.
.B
CACM June, 1958
.A
Wegstein, J. H.
.N
CA580602 JB March 22, 1978  9:09 PM
.X
20  5   20
20  5   20
20  5   20

я написал этот код:

    //IMPORTS

Public class in{
    public static void main(String[] args) throws IOException{  
    Path p = Paths.get("C:\\Users\\pc\\Desktop\\indexationeclipc", args);       
    StandardAnalyzer analyzer = new StandardAnalyzer();
    Directory directory = FSDirectory.open(p);
    IndexWriterConfig config = new IndexWriterConfig(analyzer);
    IndexWriter iwriter = new IndexWriter(directory, config);

    BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\pc\\Desktop\\index\\cacm.htm"));

    boolean lire=false;

    String[] fields = new String[5];
    for (int i = 0; i < fields.length; i++) {
        fields[i] = "";
    }
    int fieldno = 0;

    String line=br.readLine();
    while(line!=null) {
        if (line.startsWith(".I")) {


            String[] parts = line.split(" ");
            fields[0] = parts[1];
            fieldno = 0;



            if (!fields[0].equals("")) {
               Document doc=new Document();
               Field I= new StringField("I",fields[0],Field.Store.YES);
               doc.add(I);

               Field T= new StringField("T",fields[1],Field.Store.YES);
               doc.add(T);

               Field A= new StringField("A",fields[2],Field.Store.YES);
               doc.add(A);

               Field W= new TextField("W",fields[3],Field.Store.YES);
               doc.add(W);

               Field X= new TextField("X",fields[4],Field.Store.YES);
               doc.add(X);

               iwriter.addDocument(doc);

            }

             for (int i = 0; i < fields.length; i++) {
                 fields[i] = "";
             }


        }


        else if (line.startsWith(".T")) {
            lire=true;
            fieldno = 1;

        }

        else if (line.startsWith(".A")) {
            lire=true;
            fieldno = 2;
        }

        else if (line.startsWith(".W")) {
            lire=true;
            fieldno = 3;
        }

        else if (line.startsWith(".X")) {
            lire=true;
            fieldno = 4;
        }

        else if (line.startsWith(".")) {
            lire=false;
        }

        if ((fieldno > 0) && (fieldno < 5)) {
            if (lire==true) {
            if (line.length() > 2) {
                fields[fieldno] += " " + line;
            }}
        }

        line = br.readLine();       

    }


br.close();
iwriter.close();


    }       
}

Но индексация не заканчивается, индексация останавливается, и это не все термины, которые индексируются, и он проиндексировал как тысячу раз одно и то же слово, а иногда он индексирует ВСЕ фразы, а не только термины :( x))

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

femtoRgon 17.05.2018 10:21

Я не думаю, что я индексирую документы со следующим идентификатором документов, но я не знаю, почему первый документ тоже не индексируется

Arès 17.05.2018 17:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
221
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

Я бы рекомендовал использовать apache tika для извлечения данных html. Это очень полезно. См. https://tika.apache.org/

Я добавил обработку исключений, но проблема не исчезла. Что вы предлагаете для чтения данных?

Arès 17.05.2018 17:13

Я не уверен, как ваша структура должна выглядеть в конце. вы хотите добавить все теги .T в один документ или хотите, чтобы каждая статья была представлена ​​в указателе, как один документ включает .I .T .A .W .X?

dom 17.05.2018 18:04

Я хочу, чтобы каждая статья была представлена ​​в указателе, как будто один документ включает .I .T .A .W .X, это то, что я пытаюсь сделать в своем коде

Arès 17.05.2018 21:57

я обновил свой ответ. Я думаю, вам следует использовать apache tika для извлечения html. так что вам не нужно беспокоиться обо всех этих вещах, связанных с разделением строк.

dom 18.05.2018 10:44

Я вынужден использовать Lucene, это школьный проект, и меня бьют больше недели x)

Arès 18.05.2018 14:08

вам нужно использовать lucene для индексации, apache tika - это просто дополнительная структура, помогающая извлекать индексируемые данные из html. взглянуть. это стоит того!

dom 18.05.2018 14:13

Позвольте нам продолжить обсуждение в чате.

Arès 18.05.2018 18:11

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