Lucene: обновить старый проект - PullRequest
0 голосов
/ 09 июня 2018

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

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

Класс Main содержитлогика и вызывает индексатор и поиск процедурным способом.

У меня возникла проблема при поиске.

Внутри Main.java Я определил место с помощьюкаталог данных и где будет индекс и дать поисковый запрос:

File dataDirectory = new File("C:\\datalocation");
File indexDirectory = new File("C:\\indexlocation");
(...)
Search.searchThis(indexDirectory,"Maven");

Внутри Search.java :

package code;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class Search {

    static void searchThis(File indexDirectory, String findme)
            throws IOException, ParseException {

        Directory directory = FSDirectory.open(indexDirectory);
        @SuppressWarnings("deprecation")
        IndexReader indexreader = IndexReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(indexreader);

        QueryParser parser = new QueryParser("contents",
                new StandardAnalyzer());
        Query query = parser.parse(findme);
        TopDocs topDocs = searcher.search(query, 10);

        ScoreDoc[] hits = topDocs.scoreDocs;
        for (int i = 0; i < hits.length; i++) {

            int docId = hits[i].doc;

            Document d = searcher.doc(docId);

            System.out.println(d.get("path"));

        }

        System.out.println("Found: " + topDocs.totalHits);
    }

}

Проблемы, которые я получаюявляются:

  1. Метод open (путь) в типе FSDirectory не применим для аргументов (файл)

  2. Метод open (Directory) не определен для типа IndexReader

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

Изменениетип 'indexDirectory' для 'Path' не является вариантом для рассмотрения.

1 Ответ

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

1 - конвертировать, используя File.toPath :

File yourFile = indexDirectory;
Path yourPath = yourFile.toPath();
Directory directory = FSDirectory.open(yourPath);

2 - Использовать DirectoryReader.open :

DirectoryReader indexreader = DirectoryReader.open(directory);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...