Lucene: создание индекса - PullRequest
0 голосов
/ 11 июня 2018

Я давно создал проект, используя Lucene 4.6.Сейчас требуется обновить до 7.3.

В этом проекте три файла по одному классу (с тем же именем, что и у файла): Main, Indexer, Search.

Я получаюпроблема в Indexer.java , более конкретно в buildIndex () .

Внутри Main.java я определил место с помощьюкаталог данных, где будет находиться индекс, и начал создавать индекс, отправив путь к buildIndex () , где он должен быть построен:

File dataDirectory = new File("C:\\datalocation");
File indexDirectory = new File("C:\\indexlocation");
(...)

IndexWriter index = Indexer.createIndex(indexDirectory);
Indexer.buildIndex(index, dataDirectory, indexDirectory);
Indexer.closeIndex(index);
System.out.println("Index built");

Внутри Индексатор.java :

static void buildIndex(IndexWriter index, File dataDirectory,
            File IndexDirectory) throws IOException {
        File[] files = dataDirectory.listFiles();
        for (int i = 0; i < files.length; i++) {
            Document document = new Document();

            Reader reader = new FileReader(files[i]);
//the following line is where error 1 appears:
            document.add(new Field("contents", reader));

            String path = files[i].getCanonicalPath();
//the following line is where error 2 appears:
            document.add(new Field("path", path, Field.Store.YES,Field.Index.NOT_ANALYZED));

            index.addDocument(document);
        }
    }

Возникают следующие проблемы:

  1. Поле конструктора (String, Reader) не определено.

  2. Индекс не может быть разрешен или не является полем

Как это исправить?

Привести аргумент 'reader' к 'IndexableFieldType'

ИЛИ

Изменить тип 'reader' на 'IndexableFieldType' нельзя.

Примечание: Путь к каталогу данных содержит файл .txt с надписью "Maven".

1 Ответ

0 голосов
/ 11 июня 2018

Оба эти конструктора Field помечены как устаревшие в Lucene 4 и были удалены позже.

Рекомендуемые классы TextField в обоихслучаи, или также StringField для второго.

Таким образом, первый может выглядеть следующим образом:

document.add(new TextField("contents", reader));

А второй:

document.add(new StringField("path", path, Field.Store.YES));

Обратите внимание, что я не смог найти четкого эквивалента параметра Field.Index.NOT_ANALYZED, хотя (StringField не является токенизированным, TextField, не знаю, имеет ли он непосредственное отношение к этому).

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