gpt4 book ai didi

java - 在lucene中添加对象列表

转载 作者:行者123 更新时间:2023-11-30 09:09:17 25 4
gpt4 key购买 nike

我使用 lucene 4.7.0 来存储数据。我想在 lucene 文档中添加对象列表。例如

Class A{
private List<B> listOfB;
private String field1;
}

Class B {
private String name;
private String date;
}

我想添加简单明了的 field1,但如何将“listofB”存储在 A 的 lucene 文档中?

谢谢桑比

最佳答案

这是一个老问题,我没有看到对 - 我们可以将我们的类重建为一个对象吗? 的回应,所以在这里回答。

基本上,您必须使用序列化和反序列化来存储和检索作为 Lucene 文档字段的复杂对象。

我关注了this article

我正在使用 Lucene 6.6。以下是作为索引和搜索的一部分的示例代码,

Document doc = new Document();
doc.add(new TextField("content", startBean.getIndexable(), Field.Store.NO));

ByteArrayOutputStream serData=new ByteArrayOutputStream();
ObjectOutputStream out=new ObjectOutputStream(serData);

try {
out.writeObject(startBean);
} finally {
out.close();
serData.close();
}

FieldType filedType = new FieldType();
filedType.setStored(true);
filedType.setTokenized(false);

doc.add(new Field("storedcontent",serData.toByteArray(),filedType));

writer.addDocument(doc);

基本上,我有一个类型为 StartBean 的 POJO,实例为 startBean。它有一个字符串字段,我将其用作 lucene 索引字段,并将完整的 startBean 作为 byte[] 存储在 Lucene 索引中。

然后在搜索时,如果找到匹配项,

我这样做 - Document doc = searcher.doc(hit.doc); 然后调用下面的方法 - StartBean startBean = getStartBean(doc); 来重建我的对象。

private StartBean getStartBean(Document document) throws ClassNotFoundException, IOException{

StartBean startBean = null;

BytesRef binaryValue = document.getBinaryValue("storedcontent");

if(null != binaryValue){
System.out.println("binaryValue is non null ");

byte[] bytes = binaryValue.bytes;

ObjectInputStream in=new ObjectInputStream(new
ByteArrayInputStream(bytes));
try {
startBean = (StartBean) in.readObject();
} finally {
in.close();
}
}

return startBean;

}

您必须确保您的父对象和嵌套对象是Serializable 或标记为transient(基本序列化-反序列化规则)。

让我知道任何代码部分的任何澄清。

关于java - 在lucene中添加对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23107774/

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