7

我正在浏览所有现有的问题帖子,但无法获得非常相关的内容。

我有数百万条记录的人名、姓氏、地址 1、地址 2、国家代码、出生日期 - 我想每天检查我的客户名单和上述文件(我的客户名单也每天更新,并且文件也会每天更新)。

对于名字和姓氏,我想要模糊匹配(可能是 lucene 模糊查询/levenshtein 距离 90% 匹配),对于其余字段国家和出生日期,我想要完全匹配。

我是 Lucene 的新手,但是通过查看帖子的数量,看起来是可能的。

我的问题是:

  • 我应该如何索引我的输入文件?我需要在 FN、LN、国家、DOB 的组合上建立索引并使用索引进行搜索
  • 我如何在这里使用 Lucene 的模糊查询?

还有其他方法可以实现吗?

4

2 回答 2

4

Rushik,这里有一些想法:

  • 考虑使用Solr。开始使用它比裸露的 Lucene 容易得多。
  • 构建文件的 Lucene/Solr 索引。如果您使用多值字段或两个不同的字段作为地址,那么每个客户的文档似乎就足够了。
  • 每个人都有唯一的 id 吗?要使用 Solr,您需要一个。在 Lucene 中,您无需使用唯一 id 即可逃脱。
  • 将国家代码存储为“关键字”。如果您只需要精确匹配出生日期,您也可以这样做。对于范围查询,您将需要另一种表示形式。
  • 我假设您的客户列表小于文件。一个可能的策略是每天索引文件中的更改(这里唯一的 id 非常方便 - 否则您需要通过查询删除,这可能会错过标记)。然后您可以优化索引,然后运行搜索更新的客户列表。
  • 您描述的是BooleanQuery,其子句是对名字和姓氏的模糊查询以及对其他字段的术语查询。您可以通过编程方式或使用查询解析器创建查询。
  • 考虑使用 soundex 作为此处描述的名称。
于 2010-12-08T07:20:51.947 回答
2

一些关于这个主题的学术论文非常值得一读(谷歌免费 PDF):

  • 人名匹配的比较:技术和实际问题(2006 年)
  • 记录链接概述和当前研究方向(2006 年)
  • 并行开源数据链接系统(2004 年)

您还应该考虑以下库/框架:

(为未来的访客回答。)

于 2015-10-20T16:36:21.983 回答