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

Mah*_*ore 5 java lucene elasticsearch

我已经将一组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"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 9

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

1)解析你的json文件.我通常使用json简单.

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".

希望能帮助到你.

  • 这应该是选择的答案(它涉及实际的问题)! (2认同)

jav*_*nna 6

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

  • id(索引,不一定存储)
  • json 本身,原样(仅存储)

一旦你将你的 json 存储在 lucene 中,你就可以通过 id 来检索它。

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

此外,使用 lucene,直到您提交文档或重新打开索引阅读器,您的文档才可用,而 elasticsearch 为其添加了一个方便的事务日志,因此GET始终是实时的。

此外,elasticsearch 还提供了更多功能:良好的分布式基础架构、分面、脚本编写等等。一探究竟!