gpt4 book ai didi

java - 文档中的多个可字段导致 nullpointerException

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:01 24 4
gpt4 key购买 nike

当我向我的文档添加多个 Fieldable 时,当我尝试将文档添加到索引编写器时,我收到一个空指针异常(没有任何异常描述)。

我只更改了名为 stringvalue 的可字段方法,以返回字符串。

是否不允许添加更多可字段,或者我是否遗漏了某些内容?

可能相关的代码

    File[] files = FILES_TO_INDEX_DIRECTORY.listFiles();
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_33);
SimpleFSDirectory d = new SimpleFSDirectory(INDEX_DIRECTORY);
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_33, analyzer);
IndexWriter indexWriter = new IndexWriter(d, iwc);

for (File file : files) {
try
{
final String path = file.getCanonicalPath();
final String name = file.getName();
Fieldable field1 = new Fieldable()
{ removed }

Fieldable field2 = new Fieldable() {also removed}

Document document = new Document();
document.add(field1);
document.add(field2);
List<Fieldable> minliste = document.getFields();

indexWriter.addDocument(document); //this is where it fails
}

可现场:

Fieldable field1 = new Fieldable()
{

@Override
public int getBinaryLength() {
return 0;
}

@Override
public int getBinaryOffset() {
return 0;
}

@Override
public byte[] getBinaryValue() {
return null;
}

@Override
public byte[] getBinaryValue(byte[] arg0) {

return null;
}

@Override
public float getBoost() {
return 0;
}

@Override
public boolean getOmitNorms() {
return false;
}

@Override
public boolean getOmitTermFreqAndPositions() {
return false;
}

@Override
public boolean isBinary() {
return false;
}

@Override
public boolean isIndexed() {
return false;
}

@Override
public boolean isLazy() {
return false;
}

@Override
public boolean isStoreOffsetWithTermVector() {
return false;
}

@Override
public boolean isStorePositionWithTermVector() {
return false;
}

@Override
public boolean isStored() {
return false;
}

@Override
public boolean isTermVectorStored() {
return false;
}

@Override
public boolean isTokenized() {
return false;
}

@Override
public String name() {
//TODO
return "path";
}

@Override
public Reader readerValue() {
return null;
}

@Override
public void setBoost(float arg0) {
}

@Override
public void setOmitNorms(boolean arg0) {
}

@Override
public void setOmitTermFreqAndPositions(boolean arg0) {
}

@Override
public String stringValue() {
//TODO
return path;
}

@Override
public TokenStream tokenStreamValue() {
return null;
}
};

最佳答案

您正在从头开始实现您的 Fieldables。我怀疑问题隐藏在您删除的行中的某个地方 - 也许实现的方法之一返回 null ,它应该返回一个真实值。

  1. 尝试添加 Field 实例并检查是否仍然出现相同的错误
  2. 使用调试器在 NullPointerException 上添加断点,这应该有助于找到问题的真正原因。
<小时/>

既然您已经添加了 Fieldable 的实现,我非常确定会发生 NPE,因为您在实现中返回了一些 null 值。

一个热门候选者是您的 readerValue() 实现,它返回 null。 JavaDoc 解释说,此方法返回的 Reader 可以在索引时使用来生成索引标记。 索引是当您向文档添加多个Fieldable时自动发生的事情。

尝试一下:

@Override
public Reader readerValue() {
return new StringReader(path);
}

更改您的实现并避免返回null,除非JavaDoc明确指出null是合法的返回值。

(并且:即使 Field 已弃用:使用它进行测试以查看问题是否与您的 Fieldables 有关。如果您的代码适用于 Field 对象,那么您就知道在哪里查找)

关于java - 文档中的多个可字段导致 nullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com