Java 原子阅读器和KNearestNeighbour train()方法

Java 原子阅读器和KNearestNeighbour train()方法,java,solr,lucene,Java,Solr,Lucene,我正在尝试使用lucene 4.4对文本文档进行分类。我使用KNearestNeighbour类(简称KNN)来实现这一点。我已经为所有文档编制了索引,但我坚持使用KNN类的train方法,该方法将一个AtomicReader作为参数(以及另外三个参数)。我将IndexReader(带/不带类型转换)作为参数传递给AtomicReader,但它给出了一个错误。AtomicReader是IndexReader的子类。也许这就是问题所在 但我的问题是如何创建一个AtomicReader对象并将其传递

我正在尝试使用lucene 4.4对文本文档进行分类。我使用KNearestNeighbour类(简称KNN)来实现这一点。我已经为所有文档编制了索引,但我坚持使用KNN类的train方法,该方法将一个AtomicReader作为参数(以及另外三个参数)。我将IndexReader(带/不带类型转换)作为参数传递给AtomicReader,但它给出了一个错误。AtomicReader是IndexReader的子类。也许这就是问题所在

但我的问题是如何创建一个AtomicReader对象并将其传递给train方法。在我看来,在索引上创建AtomicReader的方法不同于创建IndexReader(AtomicReader是一个抽象类,因此我们可能必须使用其子类的对象)

下面是我的代码片段。{indexLoc}是我创建索引的目录路径。{knn}是KNearestNeighbour类的对象,该类是我的类的数据成员

public void startClassification() {

    try {
            StandardAnalyzer analyzer1 = new StandardAnalyzer(Version.LUCENE_44);
            FSDirectory index = FSDirectory.open(new File(indexLoc));

            /*(???how to create an appropriate AtomicReader object)*/
            IndexReader reader = DirectoryReader.open(index);

            knn = new KNearestNeighborClassifier(k);
            knn.train(reader, "content", "category", analyzer1);
            classifyTestData();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

通过迭代
索引阅读器的
叶子
,可以获得
原子阅读器

for (AtomicReaderContext context : reader.leaves()) {
    final AtomicReader atomicReader = context.reader();
    knn.train(atomicReader, "content", "category", analyzer1);
}

虽然
目录阅读器
是一个
索引阅读器
,它有一个或多个子阅读器(对于索引的每个段),
原子阅读器
是一个
索引阅读器
,它没有任何子阅读器。因此,
AtomicReader
只查看一个段中的文档,并包含从
context.docBase
context.docBase+reader.maxDoc()

的“全局”文档ID,谢谢。KNearestNeighbour类是否有适当的使用说明文件?我已经实施了我的计划,下面是它的总结。两个初始类-1。服装(约180个列车实例,10个测试示例)2。汽车(约180个列车实例,10个测试示例)。代码段-ClassificationResult thisclass=knn.assignClass(siteText);System.out.println(thisclass.getAssignedClass());System.out.println(thisclass.getScore());输出为-[61 75 74 6f 6d 6f 74 69 76 65]1.0我如何向{服装/汽车}解释此结果?谢谢。我的上述疑问现在已经澄清了。assignClass(siteText)返回一个BytesRef对象,要查看结果,我们必须转换编码。