Lucene:建立一个指数

时间:2018-06-11 09:27:17

标签: java lucene

我很久以前使用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");

Indexer.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.   

    构造函数Field(String,Reader)未定义。

  2.   

    索引无法解析或不是字段

  3. 我该如何解决这个问题?

    将参数'reader'转换为'IndexableFieldType'

    OR

    将'reader'的类型更改为'IndexableFieldType'不是一个选项。

    要注意:数据目录路径中有一个.txt文件,里面写着“Maven”。

1 个答案:

答案 0 :(得分:3)

Field的这两个构造函数在Lucene 4中都标记为deprecated,之后被删除。

两种情况下推荐的课程均为TextField,第二种课程的推荐课程为StringField

所以第一个看起来像:

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

第二个:

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

请注意,我找不到Field.Index.NOT_ANALYZED参数的明确等价物,但StringField未标记,TextField是,不知道是否与此直接相关)。