【问题标题】:storage lucene index in database using data objects in java使用java中的数据对象在数据库中存储lucene索引
【发布时间】:2011-06-17 00:30:58
【问题描述】:

这可能吗?我不能直接访问数据库——只能通过数据对象。 如果项目以 ArrayList 之类的形式返回,我是否能够搜索索引?

如果这不可能,有什么方法可以使用 Lucene(或其他工具)对使用 java 的对象进行模糊匹配?

例如,我有一个包含 FirstName 和 LastName 的 Person 对象。我想对名称进行模糊匹配。 那么,假设我有一个 x 数量的 Person 对象数组,是否有一种有效的方法来遍历每个 Person 对象并比较名称?

【问题讨论】:

    标签: lucene match fuzzy-search


    【解决方案1】:

    获取这些数据对象并在它们之上构建一个单独的 Lucene 索引,存储您需要的字段。使用您的 Person 示例,每个 Lucene 文档都是 [Id, FirstName, LastName]。对该索引的搜索将返回查询数据库以获取完整数据对象所需的 Id。

    实际的索引很容易,您只需要检索数据对象列表,迭代它们,生成 Lucene 文档,并使用 IndexWriter 存储它们。您可以使用文件系统目录进行持久存储,也可以使用内存存储。

    【讨论】:

      【解决方案2】:

      这些是我想出的可能的解决方案—— 但是,我无法将索引存储在 FSDirectory 上(项目规范不允许这样做),对于 RAMDirectory,我们需要搜索数千个 Person 对象,所以我不知道内存存储是否理想对于这种情况。

      我可以使用任何其他类型的模糊匹配算法来有效处理大量数据吗?

      【讨论】:

      • 我相信这是对答案的评论。几千个文档对 Lucene 来说不是问题,一万个每个 1 kb 的文档仍然只有 10 mb 的内存。我不知道你打算使用什么 fzzu 算法,但你可能想研究一下 BKTree 结构,它可以与 Levensthein 距离一起使用以允许模糊匹配。
      猜你喜欢
      • 2010-10-05
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多