将lon对象存储到lucene索引中或从中检索Json对象

时间:2013-03-19 13:47:29

标签: java elasticsearch lucene

我已将一组json对象存储到lucene索引中,并且还希望从索引中检索它。我正在使用lucene-3.4。

所以有没有任何库或简单的机制可以在lucene中实现这一点。

对于示例:Json对象

{
    BOOKNAME1: {
        id:1,
        name:"bname1",
        price:"p1"
    },
    BOOKNAME2: {
        id:2,
        name:"bname2",
        price:"p2"
    },
    BOOKNAME3: {
        id:3,
        name:"bname3",
        price:"p3"
    }
}

任何形式的帮助将不胜感激。 提前谢谢,

2 个答案:

答案 0 :(得分:9)

我建议你通过以下方式索引你的json对象:

1)解析你的json文件。我通常使用json simple

2)使用IndexWriterConfig

打开索引

3)将文档添加到索引中。

4)提交更改并关闭索引

5)运行查询

如果你想使用Lucene Core而不是elasticsearch,我创建了一个示例项目,它将一个带有JSON对象的文件作为输入,并创建一个Index。另外,我添加了一个测试来查询索引。

我正在使用最新的Lucene版本(4.8),请看一下:

http://ignaciosuay.com/getting-started-with-lucene-and-json-indexing/

如果你有时间,我认为值得阅读“Lucene in Action”。

希望它有所帮助。

答案 1 :(得分:4)

如果你不想在json中搜索但只存储它,你只需要提取id,这有望是唯一的。然后你的lucene文档将有两个字段:

  • id(已编入索引,未必存储)
  • json本身,因为它(仅存储)

将json存储在lucene中后,您可以通过id检索过滤。

另一方面,这几乎是elasticsearch对您的文档所做的事情。你只需通过REST api向它发送一些json。 elasticsearch将保持json不变,并且默认情况下也可以搜索它。这意味着你可以通过id检索json或者搜索它,开箱即用而无需编写任何代码。

此外,使用lucene,在提交文档或重新打开索引阅读器之前,您的文档将无法使用,而elasticsearch会为其添加便捷的事务日志,因此GET始终是实时的。

此外,elasticsearch提供了更多:良好的分布式基础架构,分面,脚本等。看看吧!