java - Lucene IndexReader 升级

标签 java lucene upgrade

我正在尝试将应用程序中的 Lucene 从版本 3.5.0 升级到 5.0.0。该应用程序具有以下代码:

IndexReader indexReader=IndexReader.open(index);
String[] fields = indexReader.getFieldNames(FieldOption.ALL).toArray(new String[0]);

我需要字段名称,因此我在 MultiFieldQueryParser 中使用它们。如何更改至 5.0.0 版本?

最佳答案

您可以使用 LeafReader.getFieldInfos() 从阅读器获取字段信息方法,然后可以从 FieldInfo.name 中获取字段名称:

public static String[] getFieldNames(IndexReader reader) {
    List<String> fieldNames = new ArrayList<String>();
    //For a simple reader over only one index, reader.leaves() should only  return one LeafReaderContext
    for (LeafReaderContext readerCtx : reader.leaves()) {
        FieldInfos fields = readerCtx.reader().getFieldInfos();
        for (FieldInfo field : fields) {
            //Check whether the field is indexed and searchable, perhaps?
            fieldNames.add(field.name);
        }
    }
    return fieldNames.toArray(new String[fieldNames.size()]); 
}

注意:可能值得考虑使用包含您要搜索的所有内容的包罗万象的字段。这是一种常见且非常有用的模式(例如,Elasticsearch 默认情况下执行此操作,其 _all field )

按照这条路线,您可以预期索引会变得更大一些,但这使得它更易于使用,并且性能应该得到提高。

关于java - Lucene IndexReader 升级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35137344/

相关文章:

Java Applet For-Loop 在 5 次迭代后停止绘制

java - jobRepository 是否必须使用与 JdbcBatchItemWriter 相同的事务管理器?

spring - @IndexedEmbedded 在延迟加载的实体列表上,不会自动进入搜索索引

Jenkins 升级 Jenkins 后无法启动通过 SSH 连接的从节点

service - 在wix进行重大升级时如何只停止而不卸载Windows服务?

java - Spring Framework是否支持多部分请求中的流模式

java - Java 中的三层系统如何工作?

Solr 在重索引实时系统上的增量备份

elasticsearch - ElasticSearch查询速度慢,并且第一次查询总是花费太多时间

java - hibernate从3.6.5升级到4.3.5时更换jar