[英]How to treat JSON objects as separate documents while indexing using Lucene
我有一些JSON文件,看起來像下面的文件。 我想將每個文件中的每個JSON對象都視為一個文檔(以“ user_id”作為唯一標識符)。 我的代碼將整個JSON文件視為一個文檔。 我怎樣才能解決這個問題?
[
{
"user_id": "john_doeee",
"lon": 204.0,
"lat": 101.0,
"stored" : true,
"hashtag" : "ucriverside"
},
{
"user_id": "carlos_baby",
"lon": 204.0,
"lat": 101.0,
"stored" : true,
"hashtag" : "UCR"
},
{
"user_id": "emmanuel_",
"lon": 204.0,
"lat": 101.0,
"stored" : false,
"hashtag": "riverside"
}
]
我認為這與Document方法有關嗎? 這是我所擁有的:
static void indexDoc(IndexWriter writer, Path file, long lastModified) throws IOException
{
try (InputStream stream = Files.newInputStream(file))
{
//Create lucene Document
Document doc = new Document();
doc.add(new StringField("path", file.toString(), Field.Store.YES));
doc.add(new LongPoint("modified", lastModified));
doc.add(new TextField("contents", new String(Files.readAllBytes(file)), Store.YES));
writer.updateDocument(new Term("path", file.toString()), doc);
}
}
不,與Document方法無關。 Lucene沒有默認的方式來理解這是JSON文件,應該將其拆分為多個Lucene文檔。 您將需要使用一些Java JSON庫自己進行操作。
許多可能性之一可能是將https://github.com/stleary/JSON-java庫與以下代碼一起使用:
JSONArray arr = new JSONArray(" .... ");
for (int i = 0; i < arr.length(); i++) {
String text = arr.getJSONObject(i);
doc.add(new TextField("contents", text), Store.YES));
}
當然,您可以自由使用任何其他JSON庫,例如Jackson,GSON等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.