java - 如何在使用 Lucene 进行索引时将 JSON 对象视为单独的文档
问题描述
我有一些 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 等。
推荐阅读
- android - 在 multitouchlistner 的 scalegesture 中按比例缩放 textview 的 setTextsize
- angular - Ng Bootstrap Modal 在提交按钮上关闭,而不是在 Modal 中提交 Angular 表单
- python - GetOldTweets 循环通过 startdate 直到下一个
- c# - 在 C# 中存储序列化对象及其更简单的变体
- google-bigquery - 在 BigQuery 中使用 _TABLE_SUFFIX 时无法识别名称“列”
- c# - RSA 密码术输出错误值
- python - 测试准确度能否高于验证准确度?
- node.js - Node JS 中的 HTTP 标头请求
- git - 是否可以使用 `git cat-file -p` 的 `master^{tree}` 语法来打印 blob?
- javascript - 有什么方法可以限制wordpress中的不同IP?