【问题标题】:Lucene: Mining email addresses, names, and identifiers from an indexLucene:从索引中挖掘电子邮件地址、姓名和标识符
【发布时间】:2013-11-12 20:38:15
【问题描述】:

我有一个大约 lucene 索引。 100 万份文件。从这些文件中,我想挖掘

  1. 电子邮件地址
  2. 签名 - ( [whitespace]/s/[whitespace]john doe[whitespace] )
  3. 每个文档的特定标识符(遵循正则表达式模式 "\s[0-9]{3}[a-zA-Z0-9]{6}\s") .

我了解理想情况下使用 solr 在索引构建期间会容易得多,但是如何从构建的 lucene 索引中做到这一点?

我正在使用java。对于电子邮件地址搜索,我尝试 .setAllowLeadingWildcard(true) 然后搜索 @ 以查找所有电子邮件地址 - 但实际上我得到了零结果 。如果我在 luke 中搜索 @,我得到的结果为零。如果我在 luke 中搜索 @hotmail.com,我会得到一堆包含有效电子邮件地址的结果,例如 aaaaa@hotmail.com。

索引是使用 StandardAnalyzer 创建的。不确定这是否重要,但我相信文本是 UTF-8 格式的。

任何有用的建议,指针都很棒!请注意,这不适用于前端,因此查询不必接近实时。

【问题讨论】:

标签: java regex lucene


【解决方案1】:

分析确实很重要,是的。标准分析器会将空格和标点符号(例如 @)视为将输入拆分为标记的位置。因此,您不会期望在索引数据中看到它们中的任何一个。

您可以使用 Lucene 的正则表达式查询,特别是对于第三种情况。我认为,PhraseQuery 似乎适合第二个,尽管我对你在那里试图完成的事情有点困惑。

通常,您可能希望对电子邮件字段使用不同的分析器,以便将其用作单个令牌。搜索特定电子邮件地址应该会得到合理的结果,因为尽管分析器会删除标点符号,但在一个短语中连续搜索电子邮件的三个(通常)标记将有望获得良好的匹配。但是,像\w*@\w*\.\w* 这样的正则表达式搜索不会特别有效,因为标点符号实际上不会被索引和搜索,并且正则表达式搜索不会跨越索引中的多个术语。除了搜索一组已知的电子邮件域或类似性质的东西之外,您还希望根据搜索方式重新索引使用分析,以便执行您的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2015-02-07
    相关资源
    最近更新 更多