【问题标题】:Storing and retrieving Json object to/from lucene indexes在 lucene 索引中存储和检索 Json 对象
【发布时间】:2013-03-08 05:36:01
【问题描述】:

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

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

【问题讨论】:

  • 我假设索引中的每个条目都是一个 JSON 对象,如果我错了,请纠正我。您希望对象的内部组件可搜索吗?例如,搜索 bname2 将返回相应的 json 对象。您想要基于字段的搜索吗?即“id:2”、“price:p3”类型的搜索功能。
  • @phani 不,我不想在 json 字段上进行搜索。只是我想将它们存储和检索为 json 对象
  • 在这种情况下,javanna 已经回答了符合您要求的。但是,我不确定您是否有任何与每个 json 对象关联的唯一 ID。
  • 如果没有唯一的 id,就很难检索存储的文档,除非你想遍历它们。
  • @javana 是的,我将每本书的密钥设为唯一,然后将形成的 json 作为字符串存储到索引中并对我的问题进行排序。

标签: java elasticsearch lucene


【解决方案1】:

我建议您通过以下方式索引您的 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》。

希望对你有帮助。

【讨论】:

  • 这应该是选择的答案(它处理实际问题)!
  • 您好,我已阅读您的回答和您的博客。这是一篇很棒的文章。但是我的问题发生在其他情况下。你能看看我的这个问题吗? stackoverflow.com/questions/51874022/…谢谢
【解决方案2】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2010-10-13
    • 2011-11-14
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多