Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Lucene分类器中使用多个叶子_Java_Lucene_Document Classification - Fatal编程技术网

Java 在Lucene分类器中使用多个叶子

Java 在Lucene分类器中使用多个叶子,java,lucene,document-classification,Java,Lucene,Document Classification,我正在尝试使用lucene中的KNearestNeighbour分类器。文档分类器在其构造函数中接受一个leafReader,用于训练分类器。 问题是,我用来训练分类器的索引有多个叶子。但是该类的构造函数只接受一个叶,并且我找不到将剩余的叶读取器添加到该类的进程。我可能错过了什么。有谁能帮我解决这个问题吗 以下是我当前使用的代码: FSDirectory index = FSDirectory.open(Paths.get(indexLoc)); IndexReader read

我正在尝试使用lucene中的KNearestNeighbour分类器。文档分类器在其构造函数中接受一个leafReader,用于训练分类器。 问题是,我用来训练分类器的索引有多个叶子。但是该类的构造函数只接受一个叶,并且我找不到将剩余的叶读取器添加到该类的进程。我可能错过了什么。有谁能帮我解决这个问题吗

以下是我当前使用的代码:

    FSDirectory index = FSDirectory.open(Paths.get(indexLoc));
    IndexReader reader = DirectoryReader.open(index);
    LeafReaderContext leaf = leaves.get(0);
    LeafReader atomicReader = leaf.reader();
    KNearestNeighborDocumentClassifier knn = new KNearestNeighborDocumentClassifier(atomicReader, BM25, null, 10, 0, 0, "Topics", field2analyzer, "Text");

叶子代表你索引的每一部分。在性能和资源使用方面,您应该迭代叶子,为每个片段运行分类,并累积结果

for (LeafReaderContext context : indexReader.getContext().leaves()) {
  LeafReader reader = context.reader();
  // run for each leaf
}
如果这是不可能的,您可以使用
SlowCompositeReaderWrapper
,顾名思义,它可能会非常慢,因为它会动态聚合所有树叶

LeafReader singleLeaf = SlowCompositeReaderWrapper.wrap(indexReader);
// run classifier on singleLeaf
根据您的Lucene版本,它位于Lucene core或Lucene misc中(我认为是Lucene 6.0之后)。此外,此类已弃用,并计划在Lucene 7.0中删除


第三个选项可能是运行
forceMerge(1)
,直到您只有一个段,并且可以使用单个叶进行此操作。但是,强制合并到单个段还有其他问题,可能不适用于您的用例。如果数据只写一次,然后仅用于读取,则可以使用forceMerge。如果您有定期更新,您将不得不使用第一个选项并自己聚合分类结果。

我使用的是lucene 6.3。第一种方法对我来说不是一种选择,因为我必须同时训练分类器,聚合将不可能。“SlowCompositeReaderWrapper”似乎是目前可行的选择。谢谢