【问题标题】:Lucene Fuzzy Search for customer names and partial addressLucene 模糊搜索客户名称和部分地址
【发布时间】:2010-12-08 03:20:30
【问题描述】:

我正在浏览所有现有的问题帖子,但找不到非常相关的内容。

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

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

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

我的问题是:

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

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

【问题讨论】:

    标签: lucene fuzzy-search


    【解决方案1】:

    Rushik,这里有一些想法:

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

    【讨论】:

    • 感谢 Yuval,是的,我在文件中每个人都有唯一的 ID,因此我应该很好。客户列表比个人文件小得多。我会尝试这个解决方案并返回。
    【解决方案2】:

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

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

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

    (为未来的访客回答。)

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 2014-05-04
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多