7

我已经将一组 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"
    }
}

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

4

2 回答 2

12

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

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

2) 使用 IndexWriterConfig 打开一个索引

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

4) 提交更改并关闭索引

5)运行您的查询

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

我使用的是最新的 Lucene 版本(4.8),请看这里:

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

如果有时间,我觉得值得一读《Lucene in Action》。

希望能帮助到你。

于 2014-07-24T08:48:56.313 回答
6

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

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

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

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

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

此外,elasticsearch 还提供了更多:一个不错的分布式基础架构、分面、脚本等等。看看这个!

于 2013-03-20T09:33:38.333 回答