2016-02-01 49 views
2

我正在嘗試將我的應用程序中的Lucene從版本3.5.0升級到5.0.0。該應用程序具有此代碼:Lucene IndexReader升級

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

我需要fieldNames,因此我在MultiFieldQueryParser中使用它們。我如何更改爲5.0.0版?

回答

2

可以使用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()]); 
} 

注:使用catch-這可能值得考慮而是包含您想要搜索的所有內容的所有字段。這是一個常見且相當有用的模式(例如,Elasticsearch默認會這樣做,它們的默認設置爲_all field

通過該路徑,您可以預期索引變得稍大一點,但它使它更易於使用,並且性能應該提高。

相關問題