首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene分类器中使用多叶分类器

Lucene分类器中使用多叶分类器
EN

Stack Overflow用户
提问于 2017-03-30 11:38:17
回答 1查看 590关注 0票数 2

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

下面是我目前使用的代码:

代码语言:javascript
复制
    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");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 12:28:09

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

代码语言:javascript
复制
for (LeafReaderContext context : indexReader.getContext().leaves()) {
  LeafReader reader = context.reader();
  // run for each leaf
}

如果这是不可能的,您可以使用SlowCompositeReaderWrapper,顾名思义,它可能非常慢,因为它聚集了所有的叶子。

代码语言:javascript
复制
LeafReader singleLeaf = SlowCompositeReaderWrapper.wrap(indexReader);
// run classifier on singleLeaf

这取决于您的Lucene版本,它位于Lucene或Lucene中(我认为从Lucene6.0开始)。另外,在Lucene7.0中,这个类被废弃,并计划删除。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43116813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档