java - 如何将lucene36转移到lucene 40

标签 java lucene

这是代码:

 public int docsContainTerm(Term tm) throws IOException {
  TermDocs termDocs = indexReader.termDocs(tm);
    //DocsEnum termDocs = indexReader.
    int count = 0;
    while (termDocs.next()) {
        if (indexReader.docFreq(tm) != 0) {
            count++;
        }
    }
    return count;
}

public int tf(Term tm, String docName) throws IOException {
    TermDocs termDocs = indexReader.termDocs(tm);
    while (termDocs.next()) {
        Document doc = indexReader.document(termDocs.doc());
        if (doc.get("filename").equals(docName)) {
            return termDocs.freq();
        }
    }
    return 0;
}
public static void main(String[] args) throws CorruptIndexException, IOException {
    String indexDir = "indexDir";
    String docs = "docs";
    String query = "KENNEDY ADMINISTRATION PRESSURE ON NGO DINH DIEM TO STOP SUPPRESSING THE BUDDHISTS";
    Directory dir = FSDirectory.open(new File(indexDir));
    IndexReader indexReader = IndexReader.open(dir);
    BM25 bm25 = new BM25(indexReader, docs);
    System.out.println(bm25.getContent("171"));
    System.out.println(bm25.htmlGetContent("171", query.toLowerCase()));
}

}

我搜索了一些相关内容,有人说我应该将 TermDocs 更改为 DocsEnum,但我不知道如何更改。 这是错误: 线程“main”java.lang.Error 中出现异常: Unresolved 编译问题:

at BM25.main(BM25.java:269)

最佳答案

来自Apache Lucene Migration Guide ,

  1. 术语现在本质上是二进制的(任意 byte[]),由 BytesRef 类表示(它提供了现有 byte[] 中的偏移量 + 长度“切片”)。

  2. 字段是根据每个字段中的术语 (TermEnum) 单独枚举的 (Fields.iterator())。

  3. TermDocs 已重命名为 DocsEnum。

  4. TermPositions 已重命名为 DocsAndPositionsEnum,并且不再扩展仅文档枚举器 (DocsEnum)。

  5. 已删除的文档不再从文档/位置枚举中隐式过滤。相反,在获取枚举时,您传递一个 BitsskipDocs(设置的位被跳过)。此外,您现在可以向读者询问其已删除的文档。

  6. 文档/位置枚举无法查找术语。相反,TermsEnum 能够进行查找,然后您可以从该TermsEnum 请求文档/职位枚举。

  7. TermsEnum 的查找方法返回更多信息。

  8. TermsEnum 有一个 ord() 方法,返回未定位到的术语的长数字序数(即第一项是 0,下一项是 1,依此类推)。还有相应的seek(long ord)方法。请注意,这些方法是可选的;特别是 MultiFieldsTermEnum 没有实现它们。

  9. 获取枚举的方式已更改。主要入口点是 Fields 类。 DocsAndPositionsEnum 也是如此。

关于java - 如何将lucene36转移到lucene 40,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22615627/

相关文章:

java - 如何查询高分辨率性能计数器

java - 贾夫、卢塞恩 : Search with numbers as String not working

search - Liferay、搜索和安全模型

java - 获取针对特定字段 Lucene 的所有方面记录

java - 计算文档字段中正则表达式查询匹配的数量

java - quartz 调度器 : Schedule job on second last day of month

java - 在内部框架中绘制二维圆

java - 尝试运行 Java NIO SSL 的简单示例来加载 https ://www. amazon.com 的内容,但收到 400 Bad Request

java - Activiti中查询任务开始和结束日期

c# - 如何将 Lucene.Net RAMDirectory 写回磁盘?